Entwickler-Ecke
Sonstiges (Delphi) - FTP-Programm per COM fernsteuern - geht das?
Ares - Mi 28.09.11 14:52
Titel: FTP-Programm per COM fernsteuern - geht das?
Hallo!
Es geht um ein FTP-Programm, dessen Funktionen auch von anderen Programm aus verwendet werden können sollen. In dem FTP-Programm können Konten für verschiedene FTP-Server verwaltet und natürlich Dateien hoch- und runtergeladen werden.
Ein externes Programm "Client" soll nun beim FTP-Programm nachfragen können welche Konten es gibt und diesem dann auch sagen können "Lade bitte Datei XYZ den zum Konto 123 gehörigen Server".
Wie lässt sich diese Kommunikation zwischen den beiden Programm am besten Lösen. Nach meinen bisherigen Recherchen wäre wohl COM die beste Lösung. Sehr Ihr das auch so?
Ich habe schon ein wenig nachgeforscht und experimentiert. Da das FTP-Programm ja eine eigenständige Anwendung ist geht es in den Begriffen von COM also um einen lokalen Server und nicht um einen In-Process-Server. Ich habe ein Testprogramm (stellvertretend für das FTP-Programm) erstellt und diesem eine COM-Object hinzugefügt, das in einer einfachem Methode einfach zwei Zahlen addiert.
Ein zweites Testprogramm stellt den Client dar. In diesem habe ich die Typbibliothek des Server importiert, eine Instanz der CoClass erstellt und in dieser die Methode zum addieren der beiden Zahlen aufgerufen.
Das Ganze klappt soweit ganz gut. Allerdings habe ich noch ein paar Probleme:
Instantiierung der CoClass und Aufruf der Addier-Methode finden nach einem Button-Klick statt. Hierbei wird ganz kurz das Fenster des Serverprogramms sichtbar und verschwindet direkt wieder. Ich nehme mal an, dass der Server kurz gestartet, die Methode aufgerufen und der Server direkt wieder beendet wird. Wie schaffe ich es, dass der Server unabhängig von diesem Aufruf aktiv bleibt?
Auch wenn ich den Server vor dem Client starte, wird durch den Client dennoch eine neue Instanz gestartet (erscheint kurz und ist direkt wieder weg). In der bereits gestarteten Instanz des Servers kommt nichts an (keine Logausgabe).
Ziel wäre es, dass der Client prüft ob der Server läuft und diesen ggf. startet. Ist der Server bereits aktiv wird dieser natürlich nicht noch einmal gestartet. Auch wenn es zwei Clients gibt, gibt es dennoch nur einen Server. Anschließend kann der Client die Kontoliste beim Server abfragen oder diesen einen Uploadauftrag senden. Wird der Client beendet hat er die Wahl ob er auch dem Server ein Signal zum Beenden sendet oder nicht. In jedem Fall hätte der Server die Wahl ob er sich wirklich beendet oder nicht.
Lässt sich das mit COM Umsetzten? Dies habe ich bislang leider noch nicht raus finden können.
Bei der Erstellung eines COM-Objektes mit Hilfe des "COM-Objekt-Expert" kann man den Instantiierungs-Typ auswählen. Zur Wahl stehen "Intern", "Mehrere Instanzen" und "Eine Instanz". Aus den zugehörigen Erklärungen heraus habe ich jedoch noch nicht verstanden ob dies für meinen Fall relevant ist und was genau sich dahinter verbirgt. Zudem habe ich keine Möglichkeit gefunden den Typ Ende des Expreten zu verändert. Geht dies nicht?
Herzlichen Dank für eure Hilfe!
Ares
jaenicke - Mi 28.09.11 17:50
Wenn du eine entsprechende Version von Delphi (z.B. XE2 Enterprise) hast, ginge es sehr komfortabel über DataSnap.
Bei COM müsste ich es auch erst testen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!