[C++] Mit anderen Programmen kommunizieren / sie nutzen



  • Hallo,

    ich habe seit einiger Zeit angefangen C++ zu programmieren.
    Dadurch, dass ich das Programmieren von mit Java bereits gelernt
    habe, kenne ich bereits das Prinzip des Programmierens.
    Ich habe mich bereits an die etwas ungewohnte Struktur von C++
    gewöhnt und habe nun ein Problem, welches mir das Programmieren
    von anderen Programmen als das "Hello World"-Programm oder ähnliches erschwert.
    Mein Problem liegt darin, dass ich noch nicht verstanden hab, wie das mit den DLLs und einbinden anderer Libraries funktioniert. Natürlich gibt es dafür einige Tutorials, Dokumentationen, etc.. Was ich jetzt nur gerne wissen würde:
    ist das der Weg wie mein Programm mit anderen Programmen interagieren kann?

    Zum besseren Verständnis meiner Frage:

    Ich installiere mir ein Programm (z.B. eine Software zum Nachrichten verschicken)
    und ich möchte, dass mein Programm eine Nachricht durch diese Software verschickt. (wie diese Nachricht aussehen soll, sei mal dahingestellt)

    Kann ich durch oder aus einer DLL eine Methode benutzen, womit ich diese Nachricht durch mein Programm schreiben lasse und abschicke, ohne Hardware Signale zu simulieren wie man es einem Bot tun könnte.



  • Das hängt von der API deines Nachrichtenprogramms ab.

    Bietet das überhaupt an, dass man es "fernsteuert"?
    Wird eine DLL dafür schon mitgeliefert, bzw. ist eine verfügbar?

    API: https://de.wikipedia.org/wiki/Programmierschnittstelle



  • Das mit dem Nachrichten-Programm war nur ein Beispiel es ist also keine API dafür vorhanden.

    Also zum Verständnis, ich muss nach einer angegeben API vom Developer suchen, oder eine API erfragen um mit diesem Programm arbeiten zu können?



  • Genau. Du brauchst ja irgendeine Art von Schnittstelle, um auf die Funktionalität des zu steuernden Programms zugreifen zu können.

    Edit:
    Frage mal genau durchgelesen 😉

    Deine Fragestellung ist etwas verwirrend, ein Mal möchtest du mit anderen Programmen kommunizieren und ein Mal möchtest du Funktionen aus einer DLL aufrufen. Die Kommunikation kann durch eine DLL implementiert sein, aber prinzipiell sind deine beiden Fragen zwei Paar Schuhe.

    Zu 1)
    Wie ich schon sagte muss das zu steuernde Programm eine Schnittstelle anbieten, über die du auf dessen Funktionen zugreifen kannst. Das kann zB auch eine DLL sein, die entsprechende Funktionen exportiert.

    Zu 2)
    DLLs sind für sich genommen keine Programme, sondern eine Sammlung von Funktionen. Anders als bei statischen Bibliotheken (zB. .lib) wird der Programmcode der DLL nicht mit Anwendung gelinkt, sondern nur die Aufrufe der Funktionen, die in der DLL implementiert sind. Wie das genau funktioniert ist erst ein Mal nicht wichtig, das erledigt der Linker für dich. Zur Laufzeit muss diese DLL natürlich auf dem Zielsystem vorhanden sein, weil die Anwendung die DLL öffnen und die benutzten Funktionen aus ihr importieren muss (bzw. die Einsprungpunkte kennen muss).



  • Jedes Windowsprogramm nutzt Dlls, auch dein kleines „Hello World”-Beispiel.

    Grundsätzliche Funktionen wie z.B. Speichermanagement, i/o , Thread- und Prozessfunktionen etc. benötigen die kernel32.dll, also muss die kernel32.lib in den Linkereinstellungen angegeben werden.
    Die Funktionsprototypen stehen wiederum in mitgelieferten Headerdateien, stellen somit die API dar.
    Und so verhält es sich eben mit anderen Bibliotheken auch, diese stellen Headerdateien, lib- und dll-Datei(en) Verfügung und du kannst damit dann arbeiten. Und da du diese Biblioteken dem Linker mitteilst, werden die Dlls beim Programmstart „geladen” (geladen in Anführungszeichen, da das Thema doch komplexer ist).
    Und ja, man kann auch Dlls direkt laden und deren exportierte Funktionen aufrufen, das aber nur am Rande.



  • für das was du vorhast, verwendet man idr. pipes und die sind normalerweise bestandteil des betriebssystems.



  • Ok vielen Dank Leute für eure Antworten,
    ihr habt mir ziemlich weitergeholfen.

    @DocShoe, meine Frage war für dich wahrscheinlich deshalb nicht verständlich ausgedrückt, da ich, wie erwähnt, es noch nicht so gut verstanden habe und deshalb auch ein falsches Bild von hatte.

    Dieses Thema hat sich damit also erledigt. Vielen Dank für die Hilfe
    .



  • Wade1234 schrieb:

    für das was du vorhast, verwendet man idr. pipes und die sind normalerweise bestandteil des betriebssystems.

    Na, dann schreib mal ein Programm, das mit Deinem Firefox oder Deinem INet-Explorer via Pipes kommuniziert.



  • Ich glaube die Absicht war:
    Wenn man mit anderen Programmen kommuniziert, dann macht man das idR mit pipes.



  • Belli schrieb:

    Wade1234 schrieb:

    für das was du vorhast, verwendet man idr. pipes und die sind normalerweise bestandteil des betriebssystems.

    Na, dann schreib mal ein Programm, das mit Deinem Firefox oder Deinem INet-Explorer via Pipes kommuniziert.

    haben diese programme denn eine entsprechende schnittstelle bzw. greifen sie auf stdin und stdout zu?

    wenn ja, dann wäre das doch "nur" pipes erstellen, kindprozess starten, daten lesen und schreiben, oder irre ich da?



  • Das richtige übergeordnete Stichwort wäre dann wohl eher Interprozesskommunikation (IPR).



  • Wade1234 schrieb:

    Belli schrieb:

    Wade1234 schrieb:

    für das was du vorhast, verwendet man idr. pipes und die sind normalerweise bestandteil des betriebssystems.

    Na, dann schreib mal ein Programm, das mit Deinem Firefox oder Deinem INet-Explorer via Pipes kommuniziert.

    haben diese programme denn eine entsprechende schnittstelle bzw. greifen sie auf stdin und stdout zu?

    wenn ja, dann wäre das doch "nur" pipes erstellen, kindprozess starten, daten lesen und schreiben, oder irre ich da?

    Nein, da irrst Du nicht.
    Aber deshalb kann man nicht sagen:

    Wade1234 schrieb:

    für das was du vorhast, verwendet man idr. pipes

    denn ob das überhaupt geht, hängt eben davon ab, was das Zielprogramm für Möglichkeiten bietet.


Anmelden zum Antworten