Cómo obtener una cadena de la salida de ReadProcessMemory
-
08-07-2019 - |
Pregunta
Este es un fragmento de mi código.
Declare Function ReadProcessMemory Lib "kernel32" _
(ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
lpBuffer As Any, _
ByVal nSize As Long, _
lpNumberOfBytesRead As Long) As Long
Dim bytearray As String * 65526
Dim GetWindowsFormsID
ReadProcessMemory(processHandle, bufferMem, ByVal bytearray, size, lp)
GetWindowsFormsID = ByteArrayToString(bytearray, retLength)
Function ByteArrayToString(bytes As String, length As Long) As String
Dim retValStr As String
Dim l As Long
retValStr = String$(length + 1, Chr(0))
l = WideCharToMultiByte(CP_ACP, 0, bytes, -1, retValStr, length + 1, Null, Null)
ByteArrayToString = retValStr
End Function
Recibí el error '94 nulo 'al llamar a WideCharToMultiByte. Pero estoy seguro de que los bytes no están vacíos.
??
¿Es este el procedimiento exacto para convertir esta salida en String?
Solución
OK, esto está resuelto (y también esta pregunta ) . El problema es en realidad convertir la cadena WideChar en cadena ANSI. Yo uso CopyMemory en lugar de WideCharToMultiByte.
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Function ByteArrayToString(bytes As String, Length As Long) As String
Dim retValStr As String
retValStr = String(Length - 1, Chr$(0))
CopyMemory ByVal StrPtr(retValStr), ByVal bytes, Length * 2
ByteArrayToString = retValStr
End Function
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow