我想發送一條記錄,現在只有一個字符串,但我會添加更多的變量。這是我第一次使用記錄,所以這可能是一個愚蠢的問題。但是,爲什麼這個工程:SendMessage(WM_COPYDATA)+ Record + String
type
TDataPipe = record
WindowTitle: String[255];
end;
var
Data: TDataPipe;
copyDataStruct : TCopyDataStruct;
begin
Data.WindowTitle:= String(PChar(HookedMessage.lParam));
copyDataStruct.dwData := 0;
copyDataStruct.cbData := SizeOf(Data);
copyDataStruct.lpData := @Data;
SendMessage(FindWindow('TForm1', nil), WM_COPYDATA, Integer(hInstance), Integer(@copyDataStruct));
end;
接收方:
type
TDataPipe = record
WindowTitle: String[255];
end;
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
sampleRecord : TDataPipe;
begin
sampleRecord.WindowTitle:= TDataPipe(Msg.CopyDataStruct.lpData^).WindowTitle;
Memo1.Lines.Add(sampleRecord.WindowTitle);
end;
爲什麼如果在記錄,我用:
WindowTitle: String; //removed the fixed size
,並在發送方使用:
Data.WindowTitle:= PChar(HookedMessage.lParam); //removed String()
它根本不去?
我得到的訪問衝突/應用程序凍結...
的情況是:在發送端是使用SetWindowsHookEx函數迷上一個DLL,接收端一個簡單的EXE,它加載/被叫和SetWindowsHookEx ...
很好的答案!再次感謝您,始終提供完整而翔實的答案。 – LessStress