Como chegar seqüência da saída do ReadProcessMemory
-
08-07-2019 - |
Pergunta
Este é um trecho do meu 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
I obteve o erro '94 null' ao chamar WideCharToMultiByte. Mas tenho certeza de bytes não está vazia.
Este é o procedimento exato para converter essa saída em string?
Solução
OK, isso é resolvido (e também esta questão ) . A questão é realmente converter seqüência WideChar em cadeia ANSI. Eu uso CopyMemory vez 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow