AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Kommunikation zwischen einem Delphi-Prog und einem C++ Prog
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation zwischen einem Delphi-Prog und einem C++ Prog

Ein Thema von Geri · begonnen am 31. Dez 2005 · letzter Beitrag vom 31. Dez 2005
Antwort Antwort
Geri

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

Kommunikation zwischen einem Delphi-Prog und einem C++ Prog

  Alt 31. Dez 2005, 15:31
Hallo zusammen

Ich habe eine MS-Windows-Anwendung, die in Delphi geschrieben ist und eine Windows-Anwendung, die in C++ unter Visual Studio geschrieben ist. Die C++.

Nun möchte ich, dass beide Programm Daten austauschen könne. Das Delphi-Programm sendet z.B. einen Puffer mit 100 Bytes und erhält vom C++-Programm Daten zurück. (Das Delphi-PRogramm sendet z.B. einen Befehl mit Paramter und erhält Informationen zurück. Der Datenaustausch sollte mit mindestens 1MBit erfolgen.

Habt jemand von Euch vielleicht eine gute Idee, wie man so ein Problem lösen kann. Früher gab es ja DDE, das war sehr einfach.



Vielen Dank für Eure Rückmeldung, ich wüsche Euch Allen einen guten Rutsch ins Neue Jahr, beste Grüsse
Geri
Gerhard
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 31. Dez 2005, 15:41
du könntest mit wm_copydata arbeiten
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Geri

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

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

  Alt 31. Dez 2005, 15:48
Hallo SirThornberry

Vielen Dank für Deine rasche Antwort auf mein Anliegen. Super Idee!!!

Wenn man unter der MSN recherchiert findet man auch ein Beispiel in C++.


Gibt es für Delphi hier vielleicht eine fertige Komponente bei der man den Namen der Anwendung angibt, den Puffer und die über eine Sende/Empfangsroutine verfügt?


Freundliche Grüsse
Geri
Gerhard
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

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

  Alt 31. Dez 2005, 16:03
Und heute gibt es immer noch DDE
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 31. Dez 2005, 16:07
Zitat von Geri:
Gibt es für Delphi hier vielleicht eine fertige Komponente bei der man den Namen der Anwendung angibt, den Puffer und die über eine Sende/Empfangsroutine verfügt?
Wie denn? Es ist nur die ID der Windows-Message festgelegt aber sonst nichts.
Also "einfach" WM_COPYDATA als Message-Eventhandler in deinem Hauptformular definieren und Daten entsprechend deiner Schnittstellenabsprache mit dem C++-Entwickler codieren/dekodieren.
Bessere Schnittstellenbeschreibungen gibt es nur wenn Du z.B. COM oder SOAP verwenden würdest. Bei COM kannst Du dann einfach die Typbibliothek des C++-Programms importieren und hast dann alle in der Schnittstelle definierten Methoden mit Aufrufparametern als Pascal-Importdatei.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
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, 16: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
tommie-lie
(Gast)

n/a Beiträge
 
#7

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

  Alt 31. Dez 2005, 17:58
Zitat von Geri:
Ach ja, kann der receiver auch daten direkt zurückschicken und der Sender auf diese Nachricht warten, gleich nachem er gesendet hat?
Send-Message ist bereits synchron und liefert einen Integer als Wert zurück. Diesen Integer-Wert kannst du vom Recevier aus verändern, indem du der Message ein Ergebnis zuweist (TMessage/TMsg haben dafür eigene Member, wenn ich mich recht erinnere). Benötigst du mehr Daten als 4 Byte, kannst du beispielsweise Mutexe oder Semaphores benutzen, die der Receiver erzeugt und auf die der Sender nach der Rückkehr von SendMessage() wartet.
Eine andere Möglichkeit wäre, die Nachrichtenschleife zu überschreiben und alle Nachrichten in eine lokale Queue zu stopfen, bis du die eine gewünschte Nachricht erhältst. Ist diese Nachricht bearbeitet, wird zunächst die lokale Queue mit den alten Nachrichten abgearbeitet und anschließend die globale weiterbearbeitet. Das könnte aber je nach Message auch Nebenwirkungen mit sich ziehen und ist mit Sicherheit komplexer als ein Mutex.
Eine Möglichkeit, gezielt eine Message aus der globalen Message-Queue zu fischen bzw auf deren Ankunft zu warten ist mir nicht bekannt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz