Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с памятью с помощью RtlMoveMemory

9.6K
04 апреля 2005 года
AlexIII
5 / / 31.03.2005
Имеется массив с аски кодами символв. Требуется сформировать строку из массива, используя API функцию RtlMoveMemory. И обратно из строки записать в массив коды. С числами все хорошо. Массив кодов числа определенного типа преобразуется к числу и обратно. Подсказал человек как это сделать. Ниже его подсказка. Требуется то же самое, но для строк, ипользуя RtlMoveMemory, т.е. перебор с использованием Asc() и Chr() мне не подходит.

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Private Sub Command1_Click()
Dim B() As Byte
ReDim B(1 To 8) As Byte
B(1) = 212
B(2) = 205
B(3) = 39
B(4) = 183
B(5) = 79
B(6) = 196
B(7) = 226
B(8) = 64
Dim dblRepr As Double
dblRepr = 0
Call CopyMemory(VarPtr(dblRepr), VarPtr(B(1)), 8)
Debug.Print "38434.4911=" & CSTR(dblRepr)
End Sub
3.5K
04 апреля 2005 года
Rubins
30 / / 16.06.2003
Цитата:
Originally posted by AlexIII
Имеется массив с аски кодами символв. Требуется сформировать строку из массива, используя API функцию RtlMoveMemory. И обратно из строки записать в массив коды. С числами все хорошо. Массив кодов числа определенного типа преобразуется к числу и обратно. Подсказал человек как это сделать. Ниже его подсказка. Требуется то же самое, но для строк, ипользуя RtlMoveMemory, т.е. перебор с использованием Asc() и Chr() мне не подходит.

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Private Sub Command1_Click()
Dim B() As Byte
ReDim B(1 To 8) As Byte
B(1) = 212
B(2) = 205
B(3) = 39
B(4) = 183
B(5) = 79
B(6) = 196
B(7) = 226
B(8) = 64
Dim dblRepr As Double
dblRepr = 0
Call CopyMemory(VarPtr(dblRepr), VarPtr(B(1)), 8)
Debug.Print "38434.4911=" & CSTR(dblRepr)
End Sub



Private Declare Sub CopyMemoryS Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As String, ByVal Source As Long, ByVal Length As Long)

и передавай строку. Только предварительно выдели
память,равную длине строки.

Str = String(" ", Length)

9.6K
04 апреля 2005 года
AlexIII
5 / / 31.03.2005
У меня так не работает, может подскажешь, где я не прав?

Private Declare Sub CopyMemoryReadStr Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim dblval() As Byte
ReDim dblval(1 To 8) As Byte
Dim strSource As String

dblval(1) = 194
dblval(2) = 224
dblval(3) = 241
dblval(4) = 232
dblval(5) = 235
dblval(6) = 252
dblval(7) = 229
dblval(8) = 226 'это аски коды идут

strSource = VBA.String(25, " ")
CopyMemoryReadStr ByVal StrPtr(strSource), ByVal VarPtr(dblval(1)), 25
Debug.Print strSource

Результат: strSource="????LA?? "
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог