Guybrush Threepwood Geschrieben 9. Januar 2014 Geschrieben 9. Januar 2014 Ich habe einen C# Com Server und einen C++ COM Client. Muss ich die Daten die ich vom Server im Client erhalte manuell wieder freigeben oder wird das irgendwie durch COM automatisch erledigt (ich vermute nicht)? Also zum Beispiel bekomme ich ein SAFEARRAY*, erzeuge mir daraus ein CComSafeArray durchlaufe das in einer Schleife und frage dann aus den einzelnen Elementen Daten ab. Das CComSafeArray müsste seine Resourcen ja wieder selber freigeben, aber was ist mit dem ursprünglichen SAFEARRAY oder was ist wenn ich mir aus einem Element aus dem CComSafeArray einen Wert vom Typ BSTR hole. Wird der BSTR automatisch mit freigegeben wenn das CComSafeArray seine Resourcen freigibt oder muss ich den auch manuell freigeben? Fragen über Fragen... Zitieren
Klotzkopp Geschrieben 9. Januar 2014 Geschrieben 9. Januar 2014 Managing COM Parameter Memory Ansonsten musst du dir die Beschreibungen der Konstruktoren und Destruktoren der Wrapperklassen ansehen. CComSafeArray beispielsweise erstellt eine Kopie, wenn du es aus einem SAFEARRAY* erstellst, gibt diese Kopie im Destruktor aber auch wieder frei. Zitieren
Guybrush Threepwood Geschrieben 9. Januar 2014 Autor Geschrieben 9. Januar 2014 Ok das heißt nach dem erzeugen des CComSafeArrays kann ich das SAFEARRAY einfach komplett freigeben und muss dann nur noch die BSTRs freigeben die ich aus dem CComSafeArray hole. Was mich aber gerade ein bisschen verwirrt ist folgendes. Ich lege ein CComSafeArray innerhalb einer Methode an, das heißt am Ende der Methode wird es automatisch aufgelöst. Innerhalb der Methode durchlaufe ich es und erstelle für jedes Element einen Eintrag in einem TreeView und hänge das Element aus dem CComSafeArray an den lParam Parameter des TreeView Eintrags dran. Das würde aber doch bedeuten das beim Auflösen des CComSafeArray auch die Elemente an den TreeView Einträgen ungültig werden und das nur zufällig "funktioniert" oder nicht? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.