Singelton-Pattern in DLL's

Hauger

Grünschnabel
Hallo,

ich versuche gerade eine DLL zu schreiben, ich der ich ein Objekt instanziiere. Dieses Objekt soll nur einmal existieren, deshalb habe ich mich für das Singelton Design Pattern entschieden. Nur leider funktioniert das nicht. Das Objekt erzeuge ich in der DllMain Einsprungsfunktion. Ich habe so das gefühl das für jeden Aufruf meiner DLL eine Kopie dieser angelegt wird. Denn ich bekomme mit jedem landen der DLL ein neues Objekt. Wie kann ich dies verhindern? Und wie kann ich egal welches Programm diese DLL aufruft immer auf das gleiche Objekt im innern der DLL zugreifen?

Gruß Jens
 
Ja du vermutest richtig.

Die in der DLL definierte Klasse ist für jede DLL nutzende Application eine eigene . Weshalb diese auch alle ein einzige Instanze behergen.

Ich lass mich gern korrigieren, aber soviel ich weiss geht das was du vorhast, überhaupt nicht.
Wenn du über eine einzige Instanze kommunizieren willst, solltest du versuchen ob es nicht Betriebssystemaufrufe gibt mit denen die Objecte dort hinterlegen kannst.
 
Shared Memory!

Hallo,

wie sähe es denn mit Shared Memory oder Named Pipes aus? Kann ich davon was benutzen um mein Objekt beiden Porgrammen zugänglich zu machen?

MfG Jens
 
Korrektur

wie sähe es denn mit Shared Memory oder Named Pipes aus? Kann ich davon was benutzen um mein Objekt beiden Porgrammen zugänglich zu machen?
Hm ich glaube diese beiden Methoden eignen sich ja nur zum Datenaustausch.

Ich lass mich gern korrigieren, aber soviel ich weiss geht das was du vorhast, überhaupt nicht.
Christian Da irrst du dich.

Die beste Möglichkeit sowas zu realisieren ist ein COM-Server und zwar ein Prozessexterner (sog. Outproc COM-Server).
Dieser existiert dann nur einmal und exportiert dann die gewünschten Objekte über Factorys.
Das ganze ist zwar sehr kompliziert aber durchaus machbar (denke ich).
Leider kann ich bezgl. COM nicht viel helfen, da mir nur wenige grundlegenden Theorien bekannt sind.

Gruß Homer[
 
Zuletzt bearbeitet:
Eine ganz übel gepfuschte Methode (ich rate ernsthaft davon ab) ist es, eine Environment-Variable zu verwendet. Ich hab's einmal so gemacht, und es lief auch klaglos (läuft immer noch), aber es ist einfach Pfui Äbäh.

Such dir einen schön eindeutigen Namen für eine Environment-Variable. Wenn du jetzt dein Singleton haben willst, prüfe, ob diese Variable schon einen Wert hat. Wenn nicht, erzeuge dein Singleton und setze die Variable auf die Adresse des Objekts. Wenn ja, caste den Wert auf eine Klasse deines Singletons. Benutze NUR das lokale Environment deines Prozesses, sonst gibt's mein nächsten Programmstart Ärger im Gebüsch.

Trotzdem, wenn möglich, anders machen.
 
Zurück