Thema: Delphi IPC mit Unicode Records

Einzelnen Beitrag anzeigen

unfan

Registriert seit: 9. Jun 2005
2 Beiträge
 
#1

IPC mit Unicode Records

  Alt 5. Sep 2005, 17:42
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?
  Mit Zitat antworten Zitat