0

現在、次のように定義しています

 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

型ごとに別の宣言があります。代わりにこれを使用しようとしています

 <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

これはpvinvoke.netから外れています。私がそれを使用しようとしている方法は次のとおりです。

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

このエラーは、Attempt to read or write protected memory と表示されますが、私はこのように持っている古い RPM 宣言を使用しており、正常に動作します。

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

私は何を間違っていますか?

4

1 に答える 1

1

p/invoke 宣言が間違っています。そのはず:

<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
于 2014-08-01T13:31:04.517 に答える