Question

Je l'ai actuellement défini comme

 Private Declare Function ReadProcessMemory1 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

Et j'ai une autre déclaration pour chaque type. J'essaie de l'utiliser à la place

 <DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function ReadProcessMemory( _
    ByVal hProcess As IntPtr, _
    ByVal lpBaseAddress As Integer, _
    <Out()> ByRef lpBuffer As Byte(), _
    ByVal dwSize As Integer, _
    ByRef lpNumberOfBytesRead As Integer) As Boolean
End Function

qui est hors pvinvoke.net, heres comment j'essaie de l'utiliser:

Public Shared Function Int(address As Integer)
    Dim buffer(3) As Byte
    ReadProcessMemory(pHandle, address, buffer, 4, 0)
    Return BitConverter.ToInt32(buffer, 0)
End Function

Cette erreur et dit tenter de lire ou d'écrire une mémoire protégée, mais j'utilise l'ancienne déclaration de RPM que j'ai comme ça et cela fonctionne bien.

Public Shared Function Int(address As Integer)
    Dim buffer As Integer
    ReadProcessMemory(pHandle, address, buffer, 4, 0)
    Return buffer
End Function

Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Votre déclaration p / invoquée est fausse.Il devrait être:

<DllImport("kernel32.dll", SetLastError:=True)> _
Public Shared Function ReadProcessMemory( _
    ByVal hProcess As IntPtr, _
    ByVal lpBaseAddress As IntPtr, _
    <Out()> ByVal lpBuffer As Byte(), _
    ByVal dwSize As IntPtr, _
    ByRef lpNumberOfBytesRead As IntPtr) As Boolean
End Function

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top