COM DLL Reference Frage???



  • Hallo Leute,

    ich hoffe ich es kommt verständlich rüber was ich fragen will.

    Ich habe eine COM DLL welche ich aus meinem Programm an einer Stelle instanziere.

    CoCreateInstance(ClassID, NULL, CLSCTX_ALL, IID_ITestFrame, (void **)&m_pITestFrame);
    

    So jetzt möchte ich an einer ganz anderen Stelle in meinem Programm, wo ich keinen
    Zugriff auf diese Instanz habe, auf diese zugreifen.

    Wenn ich da wieder CoCreateInstance Aufrufe wird ja wieder eine neue Instanz erstellt und ich komme nicht auf meine Daten aus der ersten Instanz.

    Wie könnte ich das lösen?



  • Du könntest den m_pITestFrame nehmen und durch dein Programm weiterreichen (eventuell mit AddRef()/Release() absichern, daß das Objekt nicht unterwegs verloren geht).



  • Eigentlich geht nur der Weg von CStoll, da Du sicherlich sicherstellen musst, dass beim ersten Erstellen und Füllen des Objektes kein Fehler aufgetreten ist. Um mit den Reverenzen klar zu kommen, würde ich Dir SmartPointer empfehlen.

    Ein anderer Weg wäre, dass das Objekt die Daten in eine Datei (wahrscheinlich am Besten eine XML-Datei) schreibt und später wieder laden kann. Also benötigt das Objket die Methoden Read und Write (oder auch Save und Load). Dies ist durchaus üblich, da Dein Problem nicht unbedingt selten ist.

    Wenn das COM-Objekt mit .Net geschrieben wurde, kannst Du die Funktion von .Net nach aussen legen, welche ein Objekt auf Platte sichern kann und wieder lädt. (müsste ich erst nachschaun, wie das Ding heist, würde ich aber schnell finden)

    Gruß André



  • Danke für Eure Anworten.

    Ich benutze kein .Net.

    Wie würde das denn in Visual C++ 6.0 aussehen?

    Danke für die Hilfe



  • Wie gesagt, am Besten Du verwendest Interface Pointer (LPDISPATCH, Smartpointer oder was auch immer), um das Objekt von der Stelle der Erzeugung bis zur Stelle der Benutzung druchzureichen. Im Zweifel hängst Du es als Property an Dein Hauptfenster. Eine andere Möglichkeit gibt es nicht (ist mir zumindest nicht bekannt).

    Oder Du schreibst den Zustand in ein XML-File auf Platte und lädst es später wieder. Das musst Du aber nach meinem Kenntnisstand mit der Hand machen (ausser bei .Net).

    Mir ist nicht ganz klar, welche Hilfestellung Du noch benötigst. Ist Dir klar, wie man in VC++6.0 mit COM-Objekten umgeht? Wie man einen Interface Pointer übergibt, oder was Smartpointer sind?



  • Danke für Eure Antworten.

    Hab den Interface Pointer durchgereicht.

    Hat geklappt!


Anmelden zum Antworten