我试图让 Delphi 应用程序通过 WM_COPYDATA 相互通信。我遇到的问题是发送方应用程序是用 Delphi 7 编写的,而接收方应用程序是用 Delphi 10.2 编写的。我将我的 Delphi 7 程序代码复制到 Delphi 10 中,并且通信运行良好。然而,在 Delphi 7 中使用完全相同的代码导致我的字符串被传递给接收器应用程序被破坏。我使用的代码如下:
我有一个发送方:
procedure TSenderApp.SendString(ToSend: string);
var
copyDataStruct : TCopyDataStruct;
receiverHandle : THandle;
res : integer;
begin
copyDataStruct.dwData := 140500; //use it to identify the message contents
copyDataStruct.cbData := (1+ Length(ToSend))* SizeOf(Char) ;
copyDataStruct.lpData := pchar(ToSend) ;
receiverHandle := FindWindow(PChar('TRecieverApp'),PChar('RecieverApp')) ;
if receiverHandle = 0 then
begin
ShowMessage('CopyData Receiver NOT found!') ;
Exit;
end;
res := SendMessage(receiverHandle, WM_COPYDATA, Integer(Handle),
LPARAM(@copyDataStruct)) ;
end;
在接收方,我有:
procedure TRecieverApp.WMCopyData(var Message: TMessage);
var
p : PCopyDataStruct;
l : Integer;
s : string;
begin
p := PCopyDataStruct( Message.lParam );
if (p <> nil) then
begin
ShowMessage('New Message Recieved!');
l := p^.cbData;
SetLength( s, (l+1) );
StrLCopy( PChar(s), PChar(p^.lpData), l );
Edit1.Text := s;
end
else
Edit1.Text := 'ERROR';
end;
我究竟做错了什么?或者为什么当从 Delphi 7 编写的 SenderApp 而不是从 Delphi 10 编写的 SenderApp 发送时消息字符串被破坏?