请教一个问题 怎么用vb实现得到指定字符串的内存地址 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Private Sub Command1_Click() Dim a As String a = "lxcc" MsgBox VarPtr(a)End Sub 不行,应该用StrPtr函数,字符串不同于其它数据类型变量,内存中存放字符串是需另外开辟一块内存空间的,VarPtr返回的仅是存放字符串所在内存地址的内存地址,有些绕口!没办法,就是这么复杂。总之一点,向API传递字符串指针,不需要VarPtr的返回值,那会带来“非法操作”的。顺便说一下,StrPtr、VarPtr、ObjPtr三个函数,是VB中未公开的三个函数,之所以未公开,就是因为它们与VB运行机制不相符,只有外部程序(多是API)必需时才会用上,它们的返回值应以ByVal方式传递给API,不了解的话,尽量少用,它们总是与“非法操作”为伴的,调试前,请保存好你的工程。 homezj(小吉) 你真厉害,佩服 真不明白你的意思,及你要用内存地址干什么?正常情况下,相同的字符串,虽然内容相同,但变量是不同的呀,其对应的内存地址也不同,用StrPtr函数返回每个变量的地址就是了。为什么还要找呢? 给你看个网页你就知道什么意思了http://free.e5e6.com/gm008/xgjc/gj/gj_13.htm谢谢你这么热心! 呵呵!做游戏修改器!那与你的问题是两回事了,你不是要获得VB程序自身变量的内存地址,而是别的进程中变量的内存地址。VB本身没跨进程操作的能力,只有用API了,而且对系统依赖性很大,尤其在NT内核系统中,必须用OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges等,获取令牌,先取得相应的权限才行,否则 OpenProcess不会有结果,你那篇范文,只能用于Win9X中,而9X的不稳定性是出了名的,若不熟悉的话,你可能连调试的机会都没有,就当机了。这里涉及的内容真是太多了,不是你这个问题能问清楚的。找别的进程中变量的内存地址,最常见的方案是内存扫描,通过先建立一个待扫描内存段的复本,再与改变某值后的内存进行比较,以变化量分析得出可能的地址。说实话,所有的设计,我想用不上VB的什么现成特性,几乎是API的专利。 你说的不错,openprocess 函数没有结果,总是返回0值,我用的是2000系统,能不能教我怎么做啊怎么去的权限啊?谢谢 VB应用程序打包安装问题,敬请各位高手赐教,非常感谢 shell调用时如何传递参数? VOD点歌系统的问题 一条查询语句写法 请教两个简单的问题 程序中如何在用ACTVEREPORT的直接打印时不用显示打印对话框? 请问真正的高手,如何在多个CD-ROM中读取指定CD-ROM的音轨数量? 帮帮忙好吧 一个报表问题。请教! S0S!通过电脑向手机发送短消息,如何向手机发送中文消息呢? 保存程序后这些格式文件是什么啊? SQL中如何将"2004-04-28 16:28:34" 转换成 “2004-04-28”?
Dim a As String
a = "lxcc"
MsgBox VarPtr(a)
End Sub
顺便说一下,StrPtr、VarPtr、ObjPtr三个函数,是VB中未公开的三个函数,之所以未公开,就是因为它们与VB运行机制不相符,只有外部程序(多是API)必需时才会用上,它们的返回值应以ByVal方式传递给API,不了解的话,尽量少用,它们总是与“非法操作”为伴的,调试前,请保存好你的工程。
正常情况下,相同的字符串,虽然内容相同,但变量是不同的呀,其对应的内存地址也不同,用StrPtr函数返回每个变量的地址就是了。为什么还要找呢?
谢谢你这么热心!
那与你的问题是两回事了,你不是要获得VB程序自身变量的内存地址,而是别的进程中变量的内存地址。VB本身没跨进程操作的能力,只有用API了,而且对系统依赖性很大,尤其在NT内核系统中,必须用OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges等,获取令牌,先取得相应的权限才行,否则 OpenProcess不会有结果,你那篇范文,只能用于Win9X中,而9X的不稳定性是出了名的,若不熟悉的话,你可能连调试的机会都没有,就当机了。
这里涉及的内容真是太多了,不是你这个问题能问清楚的。找别的进程中变量的内存地址,最常见的方案是内存扫描,通过先建立一个待扫描内存段的复本,再与改变某值后的内存进行比较,以变化量分析得出可能的地址。说实话,所有的设计,我想用不上VB的什么现成特性,几乎是API的专利。