首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReadProcessMemory声明

ReadProcessMemory声明
EN

Stack Overflow用户
提问于 2014-08-01 13:27:01
回答 1查看 874关注 0票数 0

我现在把它定义为

代码语言:javascript
复制
 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

我对每一种类型都有另一种声明。我试着用这个代替

代码语言:javascript
复制
 <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的,下面是我尝试使用它的方法:

代码语言:javascript
复制
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

这个错误并表示试图读取或写入受保护的内存,但是我使用了以前的RPM声明,就像这样,它工作得很好。

代码语言:javascript
复制
Public Shared Function Int(address As Integer)
    Dim buffer As Integer
    ReadProcessMemory(pHandle, address, buffer, 4, 0)
    Return buffer
End Function

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 13:31:04

您的p/invoke声明是错误的。它应该是:

代码语言:javascript
复制
<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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25081341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档