Работа с памятью с помощью RtlMoveMemory
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
Цитата:
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
Имеется массив с аски кодами символв. Требуется сформировать строку из массива, используя 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)
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?? "