怎么用vb实现得到指定字符串的内存地址

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim a As String
        a = "lxcc"
        MsgBox VarPtr(a)
    End Sub
      

  2.   

    不行,应该用StrPtr函数,字符串不同于其它数据类型变量,内存中存放字符串是需另外开辟一块内存空间的,VarPtr返回的仅是存放字符串所在内存地址的内存地址,有些绕口!没办法,就是这么复杂。总之一点,向API传递字符串指针,不需要VarPtr的返回值,那会带来“非法操作”的。
    顺便说一下,StrPtr、VarPtr、ObjPtr三个函数,是VB中未公开的三个函数,之所以未公开,就是因为它们与VB运行机制不相符,只有外部程序(多是API)必需时才会用上,它们的返回值应以ByVal方式传递给API,不了解的话,尽量少用,它们总是与“非法操作”为伴的,调试前,请保存好你的工程。
      

  3.   

    homezj(小吉) 你真厉害,佩服
      

  4.   

    真不明白你的意思,及你要用内存地址干什么?
    正常情况下,相同的字符串,虽然内容相同,但变量是不同的呀,其对应的内存地址也不同,用StrPtr函数返回每个变量的地址就是了。为什么还要找呢?
      

  5.   

    给你看个网页你就知道什么意思了http://free.e5e6.com/gm008/xgjc/gj/gj_13.htm
    谢谢你这么热心!
      

  6.   

    呵呵!做游戏修改器!
    那与你的问题是两回事了,你不是要获得VB程序自身变量的内存地址,而是别的进程中变量的内存地址。VB本身没跨进程操作的能力,只有用API了,而且对系统依赖性很大,尤其在NT内核系统中,必须用OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges等,获取令牌,先取得相应的权限才行,否则 OpenProcess不会有结果,你那篇范文,只能用于Win9X中,而9X的不稳定性是出了名的,若不熟悉的话,你可能连调试的机会都没有,就当机了。
    这里涉及的内容真是太多了,不是你这个问题能问清楚的。找别的进程中变量的内存地址,最常见的方案是内存扫描,通过先建立一个待扫描内存段的复本,再与改变某值后的内存进行比较,以变化量分析得出可能的地址。说实话,所有的设计,我想用不上VB的什么现成特性,几乎是API的专利。
      

  7.   

    你说的不错,openprocess 函数没有结果,总是返回0值,我用的是2000系统,能不能教我怎么做啊怎么去的权限啊?谢谢