Ich habe eine Anwendung (A), die eine andere Anwendung starten muss (B). Ich muss Daten zwischen den Anwendungen übergeben. Ich kann mir zwei Ansätze vorstellen. Die erste besteht darin, einen Socket zu öffnen. Die zweite besteht darin, Daten über eine DLL zu teilen.
Der Öffnungsansatz ist geradlinig.
Die DLL-Ansatz Ich habe ein paar Fragen? Ich kann Plug-in-DLLs in B laden. Ich möchte eine DLL erstellen, die A verwenden kann, um Daten an B zu übergeben. Wird beim Laden von DLLs nur eine Instanz der DLL geladen? Wenn ja, bedeutet dies, dass Daten zwischen Anwendungen geteilt werden können, die die DLL laden?
Was ist die bessere Wahl?
Gibt es andere Möglichkeiten, dies zu tun?
Die einfachste Methode (angenommen Windows, da Sie eine DLL erwähnen) ist wahrscheinlich, CreateProcess zu verwenden und eine Pipe zum Kindprozess zu öffnen, wie hier in vereinfachter Form beschrieben: Ссылка
Named Pipes können eine Alternative sein, besonders wenn Sie nicht die Kontrolle über die Lebensdauer aller Prozesse haben. Ссылка
Für einfache Fälle können Mailslots eine ausreichende Alternative sein.
Hier finden Sie eine längere Liste verschiedener Interprocess-Kommunikationstechniken für Windows. Ссылка
Wenn etwas lokal passiert, scheint die Verwendung von Sockets etwas Overkill zu sein. Außerdem müssen Sie Ihren eigenen Sicherheitsmechanismus implementieren, um Spoofing-Angriffe zu verhindern, anstatt vom integrierten Sicherheitsmechanismus der meisten anderen IPC-Methoden abhängig zu sein.
Es ist immer gut, alternative mögliche Lösungen zu erforschen, aber ich persönlich glaube, dass die Verwendung von Sockets als Transportschicht für Daten zwischen Anwendungen nicht nur zukunftssicher, sondern auch skalierbar ist. Wenn Sie Sockets verwenden, müssen Sie nicht mehr viel Betriebssystem-spezifischen Code schreiben, der Sie davon abhalten könnte, Ihre Anwendung zukünftig auf Nicht-Windows-Betriebssysteme zu portieren.
Ich würde Sockets vorschlagen.
Sie können einen gemeinsamen Cache verwenden (z. B. einen Windows-Dienst oder einen versteckten Prozess), der zuhören kann und Daten an alle Teilnehmer zurückgibt. Dies unter Verwendung eines Beobachter-Muster-Ansatzes.
Ich stimme etwas mit Juan Zamora M überein, außer dass der Dienst, der die Daten bereitstellt, eine API haben sollte das kann bei Bedarf angefordert werden, nicht gedrückt, wenn über Listener geändert.
Tags und Links c++ dll sockets networking