看流星社区

 找回密码
 注册账号
查看: 2396|回复: 2

VB的函数毛病怎么解决

[复制链接]

该用户从未签到

发表于 2011-3-30 08:25:04 | 显示全部楼层 |阅读模式
【VB的函数毛病怎么解决】
base= &H12F058
basep = rmem(base)
basep = rmem(basep + &H20)
Text5.Text = basep  
'这样就不可以了
Public Function rmem(ByVal addres As Long) As Long
ReadProcessMemory hProcess, addres, rmem, 4, 0&
CloseHandle hProcess
End Function
'这个是函数,我是这样理解的。他以值的方式传递rmem()里的的参数。当()里的参数需要再次调用这个函数的时候。就不能用了。
'我以以下方式可以正确得到答案
base= &H12F058
basep = rmem1(base)
basep = rmem2(basep + &H20)
Text5.Text = basep  
'以上代码。分2次调用2个函数
'===================第1个函数
Public Function rmem1(ByVal addres As Long) As Long
ReadProcessMemory hProcess, addres, rmem1, 4, 0&
CloseHandle hProcess
End Function
'===================第2个函数
Public Function rmem2(ByVal addres As Long) As Long
ReadProcessMemory hProcess, addres, rmem2, 4, 0&
CloseHandle hProcess
End Function
'这样就可以使用了。他貌似是先执行了basep = rmem1(base)但是没有把值存在basep里
'而在第2次调用basep = rmem2(basep + &H20)。他又一次的调用了rmem1()
'请问是我理解错了。还是VB有这个毛病?

'我曾经设想。函数这样写
Public Function rmem(addres) As Long
ReadProcessMemory hProcess, addres, rmem, 4, 0&
CloseHandle hProcess
End Function
'使他不以数值方式传递参数。把整个表达式扔进来叫ReadProcessMemory去算。但是依然存在自己无法调用自己的毛病

我是想写成这样
base= &H12F058
basep = rmem(rmem(base) + &H20)
Text5.Text = basep

该用户从未签到

 楼主| 发表于 2011-3-30 08:25:28 | 显示全部楼层
最近看了delphi的源代码感觉真的很好。后来看到了VB把负ID变正的参加运算又跑回来写VB了。
delphi里就可以直接
guaibiao:=
  rMem(
  rMem(
  rMem(
  BaseG+$18)
  +GuaiP)
  +$4);
这样写。很方便的啊

该用户从未签到

发表于 2011-3-30 08:25:37 | 显示全部楼层
Z何必使用后面rmem1,rmem2那

以下是你的声明,你使用了CloseHandle hProcess了,当然有问题了,你下面那样写的话,估计你第二次读出的数值就是0了。
解决方法
删掉CloseHandle hProcess

其实没有你根本没有必要读一次就openProcess或者CloseHandle,出现一次我觉得就够了,太使用了,反而使得你,无法看清楚有些有问题的地方

Public Function rmem(ByVal addres As Long) As Long
ReadProcessMemory hProcess, addres, rmem, 4, 0&
CloseHandle hProcess
End Function
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-16 05:19

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表