![]() |
IPC mit Unicode Records
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:
Nun bin ich aber in der Situation das ich unter Umständen UNICODE-Strings austauschen muss.
TRec = packed record
s: String[50]; end; PRec = ^TRec; Ich bräuchte am besten eine Form wie
Delphi-Quellcode:
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:
s: WideString[50];
Delphi-Quellcode:
Dabei empfängt der Receiver aber nur leere Daten.
TRec = packed record
s: PWideString; end; PRec = ^TRec; Empfänger:
Delphi-Quellcode:
Sender:
procedure TForm1.WMCOPYDATA(var msg: TWMCopyData);
var s: WideString; begin s := WideString(PRec(msg.CopyDataStruct.lpData)^.s); Edit1.Text := s; end;
Delphi-Quellcode:
Hat jemand eine Idee wie sowas funktioniert?
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; |
Re: IPC mit Unicode Records
Warum kopierst du nicht als PWideChar? Wenn du WideString oder auch String benutzt, funken dir jede Menge Funktionen dazwischen. String[xyz] ist ja ein Shortstring (per definitionem), aber WideString[xyz] eben nicht.
Daher solltest du lpData folgendes zuweisen: @DeineWideStringVariable[1] und dann die Länge in Bytes mitgeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz