Question

Ceci est un extrait de mon code.

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

J'ai reçu l'erreur '94 null 'lors de l'appel de WideCharToMultiByte. Mais je suis sûr que les octets ne sont pas vides.

alt text

S'agit-il de la procédure exacte pour convertir cette sortie en chaîne?

Était-ce utile?

La solution

OK, ceci est résolu (et cette question ) . Le problème est en fait de convertir la chaîne WideChar en chaîne ANSI. J'utilise CopyMemory au lieu 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top