function TForm1.intncnr(addncnr:longint;rnd:integer):longint; 
var 
  Num :cardinal; 
  mNum :integer; 
  pHandle: Thandle;    //很重要 
begin 
  pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄 
    if pHandle <> 0 then 
  ReadProcessMemory(pHandle, Pointer(addncnr), Pointer(@mNum), rnd, Num); 
  CloseHandle(pHandle); //关闭句柄释放内存 
  result :=mNum; end; 调用方法 
ShowMessage(inttostr(intncnr(intncnr(intncnr($041171c,4)+$0,4)+$c,1))); 最后提示应该返回1字节的数字为什么总是返回的4字节的数字呢? 

解决方案 »

  1.   

    mNum本身是4字节的,你rnd为1时,你ReadProcessMemory只做了对mNum第一个字节的赋值最简单的方法就是一开始把mNum初始化下,一开始加句mNum:=0;
      

  2.   

    function TForm1.intncnr(addncnr:longint;rnd:integer):longint; 
    var 
      Num :cardinal; 
      mNum :integer; 
      pHandle: Thandle;    //很重要 
    begin
    mNum:=0; 
      pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄 
        if pHandle <> 0 then 
      ReadProcessMemory(pHandle, Pointer(addncnr), Pointer(@mNum), rnd, Num); 
      CloseHandle(pHandle); //关闭句柄释放内存 
      result :=mNum; end; 就这样就行了?
      

  3.   

    pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,pid);//获得进程句柄 
    这里Pid都没有赋值,函数返回的都不是读取内存的数据,除非pid是全局变量
    读内存前先给赋值mNum:=0; 是正确的。
      

  4.   

    谢谢,呵呵,搞定了.,mNum:=0; 加了就行了,真不错,就是比VB麻烦了点.