AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmübergreifende Komnmunikation

Ein Thema von berens · begonnen am 16. Apr 2007 · letzter Beitrag vom 16. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 15:19
Hallo!

Ich möchte meine zwei Programme miteinander kommunizieren lassen. Wie löse ich das am Sinnvollsten?

Anforderungen:
* Komponente soll mit anderer Komponente kommunzieren können (WM_Copydata geht nur mit Formularen?)
* keine Netzwerkverbindung, nur lokal
* mehrere Komponenten Anwendung1.Typ1 sollen mit jeweils einer eigenen Instanz von Anwendung2.Typ2 kommunizieren können (ich kann z.B. über Netzwerk nicht den selben Port mehrfach verwenden)

Es heißt DDE sei am aussterben und ein COM-Server? Ich weiss nicht... Müllt der nicht auf Dauer die Registry zu und ist etwas "overpowered" für diesen Zweck ( = auch zu kompliziert?)

Sofern keiner einer bessere Idee hat, muss ich wohl mein "kleines" Com+ Buch (1000 Seiten, von Andreas Kosch) mal durchlesen.

Ausserdem: ich will auf keinen Fall meine komplette Anwendung 2 als Com Server, sondern wenn, dann nur die Kommunikation der beiden Programme darüber. Wie geht das?

Für alternativ Ideen bin ich sehr dankbar
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 15:30
Sockets oder Named Pipes.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 16:49
Zitat von berens:
mehrere Komponenten Anwendung1.Typ1 sollen mit jeweils einer eigenen Instanz von Anwendung2.Typ2 kommunizieren können
Wie soll denn dein Programm wissen, mit welcher Instanz es kommunizieren soll? Wenn es nur eine Instanz gibt, dann kanns du es am einfachsten über sendmessage machen (Da brauchst du nur irgendein WinControl, das die Daten empfängt - denn sonst können Programme ja nicht auf Windowsnachrichten reagieren.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 16:57
Apollonius:
Anwendung 1 startet Anwendung 2 (falls nicht erwähnt ), ich kann somit Parameter über die Kommandozeile übergeben.

Robert Marquardt:
Sockets ist halt immer so eine Sache (Firewall etc; Funktionalität nicht gewährleistet)
Named Pipes hört sich laut Hilfe sehr interessant an, scheitert aber schon wieder an der praktischen Umsetzung. Hier im Forum wurde schon ein paar Mal Beispiele angefragt (kein qualifiziertes gefunden), und nPipes (die Komponente) stürzt bei mir schon als fertige .exe Demo ab, also verschwende ich meine Zeit lieber nicht auf eine Technik, die mir noch mehr Probleme macht, als ich eh schon habe :/

Ich glaube die Lösung läuft aber im Endeffekt wohl doch auf Sockets hinaus, wobei mir die von Delphi6 am liebsten wären. Mit Indy hab ich bisher net so dolle Erfahrungen...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:02
Zum Verständnis: Ist das Ganze eine Konsolenanwendung?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:07
Nein, es bezieht sich auf http://www.delphipraxis.net/internal...t.php?t=108028

Ich will damit bezwecken, dass "Form1" die Position setzt, die "Form2" ihm übermittelt.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:15
Du übergibst der neuen Instanz einen Integer (z.B. wm_user+10).
Für beide Forms musst du dich dann in die Nachrichtenschleife einklinken. Dies ist die Methode wndprocdes Forms. Also deklarierst du
Delphi-Quellcode:
TForm1=class(TForm)
 protected procedure wndproc(var Message:TMessage); override;
Un dann in der Implementation:
Delphi-Quellcode:
procedure TForm1.wndproc(var Message:TMessage);
begin
if Message.msg=meineNachricht then //<--Der übergebene Integer kommt in Meinenachricht
 begin
  //Behandle die Nachricht und Nutze dabei lparam und wparam
 end
else
 inherited; //Standardnachrichtenbehandlung
end;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:17
Aber wenn Du doch schon Formulare hast, dann mach es doch mit WM_COPYDATA.

Ich habe z.B. ein kleines unsichtbares Fenster, das WM_COPYDATA Messages versendet und empfangen kann. Um eine 'Verbindung' zu einer anderen Anwendung aufzubauen, suche ich einfach nach anderen Fenstern mit dem Klassenname 'TMessageDispatcher'. Nun kann ich direkt mit anderen Fenstern Kontakt aufnehmen.

Früher hab ich das mit Shared Memory gemacht. Wenn es darum geht, einen Speicherbereich gemeinsam zu verwalten, dann bietet sich Shared Memory zusammen mit prozessübergreifenden Semaphoren an: So hat man ein sehr effizientes 'Notify', wenn der gemeinsam genutzte Bereich verändert wurde: Die Anwendung, die dort irgendetwas verändert, 'zuppelt' dann an der Semaphore und alle Anderen bekommen es mit.

Aber dazu musst Du auch lesen: Nämlich was über Threads und Synchronisationsobjekte. Ohne Lesen und Lernen kommste nun mal nicht weiter.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:22
Wenn ich das jetzt mal so durchüberlege:
1. Wenn du das neue Programm startest, dann sende ihm als Parameter das Handle des eigenen Formulars
2. Das neue Programm muss jetzt (mit wm_copydata oder irgendeiner anderen Nachricht) sein eigenes Handle zurückschicken
3. Nun kennen beide Programme das Handle des anderen, also können sie sich mit wm_copydata Nachrichten schreiben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Programmübergreifende Komnmunikation

  Alt 16. Apr 2007, 17:32
Das dürfte generell gehen. Weshalb ich es ursprünglich nicht mit WM_Copy machen wollte ist halt dass die einzelnen Komponenten unabhängig von dem Form, indem sie platziert sind arbeiten können müssen (also eine Komponente, NICHT das Form muss mit dem anderen Programm kommunizieren), aber dann muss ich wohl mehrere unsichtbare Forms machen oder sowas

Aber Danke schonmal für die Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:57 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