|
发表于 2020-10-17 16:07:36
|
显示全部楼层
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
注意第二个参数的声明,其实我是搞不懂,这个API第二个参数明明就是传的值,在很多编程语言中给的列子都是指针,其他语言就不说了,VB6也跟着学,ANY 会把很多新手绕晕。VB6正确声明应该是下面这样。
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long,ByVal lpBaseAddress As long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
如果按 你上面的声明
ReadProcessMemory pHandle, IpAddress, ByVal VarPtr(ncnr), 4, 0&
第二个参数传进去的就是 lpaddress的地址而不是lpaddress本身的值,读到别的地方当然不正确。
你要这样用才正确
ReadProcessMemory pHandle, ByVal IpAddress, ByVal VarPtr(ncnr), 4, 0&
而第三个参数需要传地址,你偏偏做了多余的操作,可以直接这样写。
ReadProcessMemory pHandle,ByVal IpAddress, ncnr, 4, 0&
如果是用我下面的声明就可以这样写
ReadProcessMemory pHandle, IpAddress, ncnr, 4, 0&
|
|