Kopieren eines COM-Objekts
-
Hi Leute,
Hab hier das nächste COM-Problem:
Ich hab das Eventhandling jetzt hinbekommen, aber jetzt erwartet mich (bzw euch *g*) gleich das nächste Problem: Ich bekomme in meiner Funktion, die das Event behandelt einen Zeiger auf ein COM-Objekt geliefert. Diesen Zeiger wollte ich in nem std::vector speichern. War keine so gute Idee, da die Zeiger ungültig werden, nachdem das Event vorbei ist. Ich muss also eine Kopie des Objektes herstellen, auf das der Zeiger zeigt. Aber irgendwie schaff ichs net
Könnte mir jemand vielleicht nen Tip geben?
Ein kleines, nettes Einsteigertutorial zu COM wär vielleicht auch ganz nett
-
COM-Objekte haben einen internen Referenzzähler. Wenn du AddRef aufrufst (oder ein QueryInterface machst), wird der um eins erhöht. Solange der Refernzzähler größer als Null ist, sollte das Objekt "am Leben bleiben". Wenn du dann mit dem Objekt fertig bist, kannst du Release aufrufen.
-
Recht herzlichen Dank
-
Noch ein Tipp:
Die ATL-Klasse CComPtr kapselt diesen AddRef/Release-Vorgang. Allerdings verträgt sie sich AFAIK wegen des überschriebenen Adressoperators nicht mit allen Standardcontainern. Dafür gibt es dann wieder CAdapt.
-
Danke
-
Hi, ich bins nochmals.
Das klappt so leider nicht
Um das Problem zu erklären, muss ich ein klein wenig weiter ausholen:
Diese Zeiger, die ich in meinem Eventhandler bekomme zeigen auf Linien, die in einem Control gemalt wurden. So, diese will ich jetzt speichern, um sie zu einem späteren Zeitpunkt wieder abrufen zu können. Wenn ich jetzt aber die Eingabe in dem Control leeren will muss ich eine Funktion aufrufen, die sich DeleteStrokes nennt. Diese scheint alle COM-Objekte zu "release"n (egal, ob ich AddRef gemacht habe oder nicht), da sie danach ungültig sind. So eine Pseudokopie wie mit AddRef bringt mir also in diesem Falle nichts. Hast du vielleicht noch eine Idee?
-
Hm, Clone-Memberfunktionen sind was Schönes
Danke für deine Mühe