Frage

Ich habe eine C ++ Klasse geschrieben, die ich brauche eine Instanz zwischen mindestens zwei Fenster Prozesse zu teilen. Was sind die verschiedenen Möglichkeiten, dies zu tun?

Am Anfang schaute ich in Pragma data_seg nur enttäuscht sein, wenn ich, dass es auf Klassen oder mit irgendetwas, das auf dem Heap reserviert funktionieren wird nicht realisiert.

Die Instanz der Klasse muss über eine dll zugänglich sein, weil bestehende, komplette Anwendungen bereits diese DLL verwenden.

War es hilfreich?

Lösung

Sie können möglicherweise verwenden Memory-Mapped-Dateien Daten zwischen Prozessen zu teilen. Wenn Sie Funktionen auf Ihrem Objekt aufrufen müssen, dann würden Sie haben COM oder etwas ähnliches verwenden, oder Sie müssten Ihr eigenes RPC-Protokoll implementieren.

Andere Tipps

Schauen Sie in :: inter . Es dauert ein wenig gewöhnungsbedürftig, aber es funktioniert sehr gut. Ich habe relativ komplexe Datenstrukturen im gemeinsam genutzten Speicher gemacht, die feinen zwischen Prozessen gearbeitet.

edit: es funktioniert mit Memory-Mapped-Dateien zu. Der Punkt ist, dass Sie Daten in einer strukturierten Art und Weise nutzen können; Sie müssen nicht die Speicherblöcke (in Dateien oder Shared Memory) als nur Rohdaten behandeln, die Sie sorgfältig müssen Lese- / Schreib in einem gültigen Zustand zu verlassen. Boost :: inter kümmert sich um jenen Teil, und Sie können STL-Container wie Bäume, Listen, usw. verwendet werden.

Sie können mit Platzierung neu das Objekt in einem gemeinsamen Speicherbereich erstellen. Solange das Objekt keine Zeiger nicht verwendet, dass sould in Ordnung sein.

Ist es ein POD oder benötigen Sie in der Lage sein, eine einzelne Instanz über Prozesse zu teilen? Haben Sie darüber nachgedacht, die Singleton-Muster (statische Initialisierung Version, für Gewinde aus Sicherheitsgründen) mit? Sie müssen Mutexes als auch verwenden, gleichzeitig schreibt und Sachen zu schützen.

Unter Windows können Sie COM als auch verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top