Final Release() auf den CCW mitbekommen
-
Wenn man ein com-visible .NET Dings hat... und irgendein Programm instanziert das über COM...
...irgendwann passiert dann ja das finale "IUnknown::Release()" auf das COM Objekt (den com-callable-wrapper).Kann man auf der .NET Seite irgendwie mitbekommen dass das passiert ist? Und wenn: wie macht man das?
-
*push*
-
Nix?
Niemand?
-
Scheint sich kaum jemand so tief damit beschäftigt zu habe. (Ich hab von COM keine Ahnung, sry). Ein einfaches Google: C# IUnknown::Release bzw. Google: c# IUnknown::Release event Google: C# CCW Release event wirst Du sicherlich schon hinter Dir haben.
http://stackoverflow.com/questions/282746/connect-to-com-events-in-c-support-both-managed-and-unmanaged-servers hier gehts darum sich in Events einzuhängen. Vllt. fallen hier Begriffe die Dich bei der Suche weiterbringen.
-
Ja, mit Google gesucht hab ich schon sehr viel. Hab' auch einige Threads gefunden wo jmd. genau die Frage stellt, aber keine brauchbaren Antworten (oft auch keine einzige Antwort).
Artikel zum Thema .NET <-> COM Interop hab' ich auch einige gefunden, aber nirgends wird explizit etwas zu dem Thema gesagt. Es wird mehrfach erwähnt dass IDisposable nicht dazu verwendet wird, und erklärt warum (kurz: es könnte ja native .NET Referenzen auf das "COM-gewrappte" Objekt geben, und ein Dispose() beim letzten Release() von der COM-Seite wäre daher in einigen Fällen nicht wünschenswert). Ich habe aber eben keinen Artikel gefunden wo entweder steht "geht nicht" oder "geht, und zwar so: ...".
Vonwegen tief mit dem Thema beschäftigen: mich wundert das irgendwie. Denn es bedeutet im Prinzip, dass man keine COM-Objekte in C# implementieren kann, die irgendetwas beim Zerstören des COM-Objekts machen müssen (zumindest keine "saubere" Implementierung). Also z.B. Objekte die ein File offen halten, Dinge wie Datenbank-Connections die freigegeben werden sollten, oder ähnliches.
Viele COM-Clients verlassen sich auf die "deterministische Finalisierung" von COM-Objekten, und wenn man die mit .NET nicht hinbekommt ...
-
Hast du schon mal versucht in den Microsoft MSDN Newsgroups zufragen.
-
Nö
Gibt's da ein Web-Interface? Oder brauch ich da wirklich nen NNTP-Client?
-
ARRRRR!
Jetzt hab' ich auch noch ein Problem mit dem RCW! Scheiss COM Interop!
Anscheinend gibt der RCW die Sink beim Unadvise nicht frei (Release), sondern erst wenn der RCW collected wird. Wie schlecht ist das denn?