例如:我有一个内存地址:$004BE133 ,我将这个内存地址写入到“EDIT1.TEXT”中,在程序代码中,如何把转换为“ReadProcessMemory”函数第二个所需要的指针? 如下:ReadProcessMemory(ProcessHandle, Pointer(mb),@szBuf11,nSize11,lpNumberOfBytesRead);上面一行代码,如何将“EDIT1.TEXT”转换“mb”?

解决方案 »

  1.   

    EDIT1.TEXT = $004BE133;或者是EDIT1.TEXT = 004BE133;ReadProcessMemory(ProcessHandle, Pointer(mb),@szBuf11,nSize11,lpNumberOfBytesRead); 如何将“EDIT1.TEXT”转换“mb”?
      

  2.   

    var
      P: Integer;
    begin
      //Edit1.Text :=  '$004BE133'; //前提
      P := StrToIntDef(Edit1.Text,0);
      if P = 0 then Exit;
      ReadProcessMemory(ProcessHandle,Pointer(P),...);
      ...
    end;
      

  3.   

    $004BE133 这个地址明显是32位的,在delphi没有起用优化的情况下用StrToIntDef还可以的有的时候会出现高位丢失现象此时程序不会报错.我们一般情况下存储指针都用LongInit,或用Cardinal 或用两个word实现高低位转化(shr16,shl16).也可以用SS: PCardinal声明一个32的指针SS:=PCardinal(StrToInt64('$004BE133')),ReadProcessMemory(ProcessHandle,SS,...);