powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с RtlMoveMemory
10 сообщений из 10, страница 1 из 1
Проблема с RtlMoveMemory
    #32551237
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически, этот код должен создать байтовый массив из строки и напечатать слово "Проверка". А выдаёт какой - то бред.
Где ошибка?
Код: plaintext
1.
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _    dst As Any, _    src As Any, _    ByVal nBytes As Long)    Private Sub Form_Load()    Dim sText As String    Dim dest() As Byte    Dim i As Long    sText = "Проверка"    ReDim dest(LenB(sText))    CopyMemory dest(0), ByVal StrPtr(sText), LenB(sText) - 1    For i = 0 To UBound(dest) Step 2        Debug.Print Chr(dest(i))    NextEnd Sub
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551269
NikNIkNIk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Poprpboval. Vse rabotaet esli vmesto kirilicti ispolzovat latinictu "Proverka"
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551283
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПРосто русский реализуется через Unicod
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551284
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, попался???

А преобразование из юникода в АНСИ за тебя в таком случае дядя делать будет?

вот твой код в рабочем варианте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub test()
Dim sText As String
    Dim dest() As Integer   'Byte
 
    Dim i As Long
    sText = "Проверка"
    ReDim dest(LenB(sText)) As Integer   'Byte
 
    CopyMemory dest( 0 ), ByVal StrPtr(sText), LenB(sText) -  1 
    For i =  0  To UBound(dest) Step  2 
        Debug.Print ChrW(dest(i))
    Next

End Sub

PS
а что
a что
Dim dest() as byte
sest=sText - уже не модно?

если не модно - в своем коде поставь
перед копимемори
sText=strConv(sText,vbFromUnicode) - (пардон за возможные очепятки)
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551292
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, а почему -1?
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551313
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо всем. Заклинило меня с Unicod'ом
Victoshasest=sText - уже не модно?
Теоретически CopyMemory должен работать быстрее. В моём приложении это очень важно.
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551336
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТеоретически CopyMemory должен работать быстрее

это оченно не очевидно. Пользу на строках "большого" размера получишь. Кроме того, важно, кто источник строк и тд и тп

Если хочешь немного ускорить вызов и целевая ось нт-образная
замени Lib "kernel32" на Lib "NTDLL.DLL" - надежная рекомендация.

можешь сделать класс, который будет копировать, выбирая точку вызова rtlMoveMemory в зависимости от текущей оси.

кажется, еще быстрее оформить обращение к копимемори в виде tlb и зарегистрировать в реестре. (не проверял)

Внимание - все усилия по "ускорению" копирования сводятся на нет "невыровненным" адресом начала копирования и неудачным размером блока.
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32551380
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 marvan
ау, ты еще тута???

Если dest() НЕ выходной массив и нужен для "числовой" обработки строки И есть желание экономить на выделениях памяти, то
посмотри тут

/topic/87645&pg=-1#643249

если интересно, могу "рабочий" пример выложить - я все равно не пользую, поскольку живу в основном в Акцессе, а там "это" бессмысленно.
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32552626
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Victosha
Спасибо с этим делом я знаком. Тока пользовать так и не решился.
...
Рейтинг: 0 / 0
Проблема с RtlMoveMemory
    #32552695
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок
будет желание, скажи примерно какого плана задача, что "ускорить" хочешь, может "зацепит" пальцами пожмакать
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема с RtlMoveMemory
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]