关于指针拷贝的疑惑....
代码如下:
- Delphi(Pascal) code
//这段代码在ontest中可以正常接收到发过来的信息procedure TForm1.btn1Click(Sender: TObject); var pdata :array[0..4] of Byte ; i : Integer;begin FillChar(pdata,5,0); for i := 0 to 4 do begin pdata[i] := i * 10; end; PostMessage(Handle,WM_TEST,5,LongWord(@pdata[0]));end;procedure TForm1.OnTest(var Msg: TMessage); var pd : array[0..4] of Byte; i : Integer;begin CopyMemory(@pd[0],Pointer(Msg.LParam),5); for i := 0 to Msg.WParam - 1 do begin ShowMessage(IntToStr(pd[i])); end;end;//下面代码也可以正常接收,只是showmessage后会报错,不知什么原因procedure TForm1.btn1Click(Sender: TObject); var pdata :pByte ; i : Integer;begin GetMem(pdata,5); FillChar(pdata^,5,0); for i := 0 to 4 do begin pdata^ := i * 10; inc(LongWord(pdata),1); end; inc(LongWord(pdata),-5); SendMessage(Handle,WM_TEST,5,LongWord(@pdata)); FreeMem(pdata,5);end;procedure TForm1.OnTest(var Msg: TMessage); var pd : pByte; i : Integer; aa : TBitmap;begin CopyMemory(@pd,Pointer(Msg.LParam),5);//拷贝正常,执行完毕报错 //Move(Pointer(Msg.LParam)^,(@pd)^,5);//正常 for i := 0 to Msg.WParam - 1 do begin ShowMessage(IntToStr(pd^)); if i < Msg.WParam - 1then Inc(LongWord(pd),1); end;end;
哪位达人解释一下
另外 能不能通过 InterlockedExchange 这个PAI直接为pd指向一个地址?
[解决办法]
CopyMemory(@pd,Pointer(Msg.LParam),5);//拷贝正常,执行完毕报错
pd没分配空间
pd = AllocMem(SizeOf(Byte)*5);