VB 读取内存数据时为什么 超过一30000几就变为负的 读取不正确了 
悬赏分:20 - 解决时间:2007-2-27 14:11 
我读取的是一个游戏的金钱数据 
为什么当钱大于30000的时候读取就不正确了 
要定义什么类型的数据 
可我什么类型的数据我都试过了 
可结果还是一样 Dim NowMoney As Long 
Dim DiZhi As Long Private Sub Timer1_Timer() 
NowMoney = ncnr(DiZhi) 
Label1.Caption = NowMoney 
End Sub 请各位高手帮帮忙..这是为什么??? 有位高手回答: 
因为你用的ncnr函数的返回值是整型的,所以你能读取低2个字节的数据,超过32768就不正确了。 
读4字节的相应函数你可以查下,我是不知道名字 
不过就算用ncnr函数也可以实现的 
NowMoney = ncnr(DiZhi) +ncnr(DiZhi+2)*32768 应该就可以。 
就是等于是把你的高位读出来,再乘上相应的单位32768,再加上低位,不就是相当于读出那4字节的长整型了么 但是我把NowMoney = ncnr(DiZhi)改成了NowMoney = ncnr(DiZhi) +ncnr(DiZhi+2)*32768 可还是老样....是不是还要改什么??? 
另外想问一下还有没有别的方法可以读取到内存数据大于32768的 越大越好....还有什么读取内存4字节的函数???拜托各位了..帮帮忙!!!!

解决方案 »

  1.   

    也许是内存中存储的高低位问题吧
    即便读出的数值不大于32768 也不会对吧
    不知道是否可以一位(8bit)一位的读出来呢,然后在转成你要的数值呢?
    比如
    NowMoney(1) as byte
    NowMoney(0) = ncnr(DiZhi)
    NowMoney(1) = ncnr(DiZhi+1)
      

  2.   

    请问楼上的请楼上的可以说具体点吗??
    偶对数据组不是很会用??要怎么声明它??
    我把我的Dim NowMoney As Long 改为了NowMoney(1) as byte
    把NowMoney = ncnr(DiZhi)改为了NowMoney(0) = ncnr(DiZhi)
    NowMoney(1) = ncnr(DiZhi+1)
    结果不能运行....
    在NowMoney(1) as byte出现编辑错误:类型块外的语句无效.
    还需要改什么吗??数据组要怎么声明
      

  3.   

    Dim NowMoney As Long 你的代码里面是不是没有写dim NowMoney(1) as byte
      

  4.   

    你的ncnr函数怎么写的,贴出来看看
      

  5.   

    Private Function ncnr(lpADDress As Long) As Integer
    Dim hwnd As Long
    Dim pid As Long
    Dim pHandle As Long
    hwnd = FindWindow(vbNullString, Text7.Text)
    GetWindowThreadProcessId hwnd, pid
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
    ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&
    CloseHandle hProcess
    End Function
    俺的ncnr函数是这样写的