Tach zusammen!
Ich stehe vor einem kleinen Problem mit Delphi7.
Ich möchte Daten zwischen zwei lokalen Anwendungen austauschen. Mit WM_COPYDATA ist das ja kein Problem. Da kann man wunderbar Records austauschen.
Delphi-Quellcode:
TRec = packed record
s: String[50];
end;
PRec = ^TRec;
Nun bin ich aber in der Situation das ich unter Umständen
UNICODE-Strings austauschen muss.
Ich bräuchte am besten eine Form wie
s: WideString[50];
Sprich: Eine Definition eines WideStrings (
Unicode) der 50 Zeichen (nicht 50 bytes enthält).
IMHO geht sowas aber nicht. Also versuche ich folgenden Record zu übertragen:
Delphi-Quellcode:
TRec = packed record
s: PWideString;
end;
PRec = ^TRec;
Dabei empfängt der Receiver aber nur leere Daten.
Empfänger:
Delphi-Quellcode:
procedure TForm1.WMCOPYDATA(var msg: TWMCopyData);
var
s: WideString;
begin
s := WideString(PRec(msg.CopyDataStruct.lpData)^.s);
Edit1.Text := s;
end;
Sender:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
Rec: PRec;
cds: TCopyDataStruct;
hWnd: THandle;
begin
GetMem(Rec, sizeof(TRec));
try
rec.s := PWideString('
HALLO!');
cds.dwData := 0;
cds.cbData := sizeof(TRec);
cds.lpData := Rec;
hWnd := FindWindow(
nil, '
Form1');
SendMessage(hWnd, WM_COPYDATA,
Handle, LongInt(@cds));
finally
FreeMem(Rec, sizeof(TRec));
end;
end;
Hat jemand eine Idee wie sowas funktioniert?