procedure TForm1.Button2Click(Sender: TObject);
var
dw:word;
bt:word;
pdwlinaddr:pword;
PhysicalMemoryHandle:Thandle;
begin
   dw:=strtoint(edit3.Text);
   pdwLinAddr:=pword(MapPhysToLin(pbyte($d0000+dw), 2, PhysicalMemoryHandle));
   bt:=pdwLinAddr^;
   UnmapPhysicalMemory(PhysicalMemoryHandle,pbyte(pdwLinAddr));
 //  getPhysword(pbyte($d0000+dw)); 
   edit2.Text:=inttostr(bt);
end;
procedure getPhysword(pbPhysAddr:pbyte);word;
var
pdwlinaddr:pword;
PhysicalMemoryHandle:Thandle;
begin
  pdwLinAddr := pword(MapPhysToLin(pbPhysAddr, 2, PhysicalMemoryHandle));
  getPhysword:= pdwLinAddr^;
  UnmapPhysicalMemory(PhysicalMemoryHandle,pbyte(pdwLinAddr));
end;
我把关键的几句写为一个过程后,运行程序就不行了,单步调试的时候发现bt的值已经是正确的了,但执行到end就不行了。我怀疑的参数的原因,但具体怎么回事不明白,请问是怎么回事。

解决方案 »

  1.   

    procedure getPhysword(pbPhysAddr:pbyte);word;?
    function getPhysword(pbPhysAddr:pbyte);word;
      

  2.   

    哦,不好意思procedure getPhysword(pbPhysAddr:pbyte);以前我想写为函数的,但没有返回的必要,我就改为过程了,我的程序里肯定不是procedure getPhysword(pbPhysAddr:pbyte);word;的。
      

  3.   

    与getPhysword(按字类型读内存)想对应的还有个setPhysword(按字类型写内存)
       pdwLinAddr:=pword(MapPhysToLin(pbyte($d0000+dw), 2, PhysicalMemoryHandle));
       pdwLinAddr^:=ok;(一个word类型的变量);
       UnmapPhysicalMemory(PhysicalMemoryHandle,pbyte(pdwLinAddr));如果我改为
     pdwLinAddr:=pword(MapPhysToLin(pbyte($d0000+dw), 2, PhysicalMemoryHandle));
       pdwLinAddr^:=1;(一个word类型的变量);
       UnmapPhysicalMemory(PhysicalMemoryHandle,pbyte(pdwLinAddr));都会出错,为什么啊?郁闷死了。