Einzelnen Beitrag anzeigen

Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Kommunikation zwischen einem Delphi-Prog und einem C++ P

  Alt 31. Dez 2005, 17:32
Hallo und vielen Dank für Eure Antworten

Mit dem Hinweis von Sirthornberry fand ich bei meiner Suche folgenden Code:

Delphi-Quellcode:
/ Sender: Send data
// Sender: Daten schicken

procedure TForm1.Button1Click(Sender: TObject);
var
  aCopyData: TCopyDataStruct;
  hTargetWnd: HWND;
begin
  with aCopyData do
  begin
    dwData := 0;
    cbData := StrLen(PChar(Edit1.Text)) + 1;
    lpData := PChar(Edit1.Text)
  end;
  // Search window by the window title
  // Fenster anhand des Titelzeilentext suchen
  hTargetWnd := FindWindowEx(0, 0, nil, PChar('WM_COPYDATA-Receiver'));
  if hTargetWnd <> 0 then
    SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
  else
    ShowMessage('No Recipient found!');
end;


(* -------------------------------------------------------------------- *)


// Recipient - Receive data
// Empfänger - Daten empfangen

type
  TForm1 = class(TForm)
    private
    { Private declarations }
    procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
  public
    { Public declarations }
  end;

procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
  sText: array[0..99] of Char;
begin
  // generate text from parameter
  // anzuzeigenden Text aus den Parametern generieren
  StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
  // write received text
  // Empfangenen Text ausgeben
  label1.Caption := sText;
end;
Daraus habe ich zwei Programme erstellt und siehe da, es funktioniert super!!!! In C dürfte es gleich gehen.

'WM_COPYDATA-Receiver' entspricht dem Titel des Fensters der Empfängeranwendung
=> In der Receiveranwendung also (Form1.caption:='WM_COPYDATA-Receiver'; setzen.

Obwohl dieser Code sehr einfach ist, könnte man auf Delphi-Seite trotzdem eine (kleine)Komponente mit Sende und Empfangsroutinen bauen.)

Ach ja, kann der receiver auch daten direkt zurückschicken und der Sender auf diese Nachricht warten, gleich nachem er gesendet hat?


procedure TForm1.Button1Click(Sender: TObject);
var
aCopyData: TCopyDataStruct;
hTargetWnd: HWND;
begin
with aCopyData do
begin
dwData := 0;
cbData := StrLen(PChar(Edit1.Text)) + 1;
lpData := PChar(Edit1.Text)
end;
// Search window by the window title
// Fenster anhand des Titelzeilentext suchen
hTargetWnd := FindWindowEx(0, 0, nil, PChar('WM_COPYDATA-Receiver'));
if hTargetWnd <> 0 then
begin
SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
lies rückgabewerte des Receivers
end
else
ShowMessage('No Recipient found!');
end;

Vielen Dank
!!! und beste Grüsse
Geri
Gerhard
  Mit Zitat antworten Zitat