Boost shared memory und eigene Klasse



  • Hallo,

    ich habe folgendes Szenario. Ich habe eine Namespace-Erweiterung entwickelt, die einen Datenhandler (als singleton) hat. Da jedoch die Namespace-Erweiterung auch aus dem Speicher unter Dialog z.B. aus Notepad heraus erreichbar sein soll, ohne dass die Daten neu geladen werden müssen, muss die Datenhaltung ausgelagert und für alle erreichbar sein.

    Zu diesem Zweck habe ich mir aus dem Boost Packet die shared memory Sachen mal angeschaut und etwas rumgespielt.

    Jetzt habe ich foldendes Problem: ich erzeuge einen managed shared memory und füge eine Instanz einer meiner Klassen dort ein. Die Klasse hat nur CString member. Sobald ich jedoch nun die Anwendung (welche die Instanz erzeugt hat) beende und neu start, wird zwar das Objekt mit dem Name aus dem shared memory geladen, aber alle CString member sind 'schlechte Ptr'.

    Das ganze sah in etwa so aus:

    CFolder* i = 0;
    	 std::pair<CFolder*, std::size_t> p = shm.find<CFolder>("Test"); 
    	 if(!p.first){
    		 CFolder z(TEXT("Shared memory folder"), 1, MODELNODE);
    		 i = shm.construct<CFolder>("Test")(z);
    	 }else{
    		 i = p.first;
    	 }
    

    die Problematik liegt wahrscheinlich im erstellen der Klasse, dass die CStrings nicht im shared memory erstellt werden. Wie erzeuge ich mein Objekt richtig im shared memory? Brauch ich da einen Kopierkonstruktor an meiner Klasse?

    Im Boost manual unter https://people.ee.ethz.ch/~bfierz/boost/interprozesskommunikation.html hab ich dazu auch nichts gefunden.

    Ich bin im moment etwas ratlos...kann mir jemand helfen? 😕

    Gruß
    Michael


Anmelden zum Antworten