トップ回答者
Silverlight 4 にて、COMの後始末について

質問
-
現在、Silverlight 4 Betaのelevated trustでの、COMオートメーションについて試してみています。
そこで疑問に思ったのですが……。
Silverlight 4のクラスライブラリのSystem.Runtime.InteropServices.Marshalクラスには、ReleaseComObjectが無いようです。
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal_members%28VS.96%29.aspx
(Silverlightではない).NetのマネージドコードからCOMを使う際は、たいていの場合『使い終わったら明示的にMarshal.ReleaseComObjectで参照カウンタを減らす』というのが必要だったと思うのですが、Silverlightでは事情が変わり、その必要が無いということでしょうか?
それともやはり、何らか他の似たような手段でそれを行う必要があったりするのでしょうか?
以上、よろしくお願いいたします。
きよくらならみ2010年1月19日 15:39
回答
-
Silverlight 4がベータ版なので、仕様変更の可能性がありますが、参考までに。
ComAutomationFactory.CreateObject/GetObjectメソッドは、ComAutomationMetaObjectProviderクラスを利用しているので、不要なオブジェクトは、nullを代入するか、Disposeメソッドを呼び出しておけばいいと思います。
http://msdn.microsoft.com/en-us/library/ee519675(VS.96).aspx
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。- 回答としてマーク Kiyokura 2010年2月3日 14:43
2010年2月3日 2:57
すべての返信
-
調べていて気がついたのですが、ComAutomationFactory.CreateObjectのリファレンスを良く見ると、これで生成されるCOMラッパーは.Net FrameworkのRCWと違ってIDisposableを実装したものになっていました。
http://msdn.microsoft.com/en-us/library/system.windows.interop.comautomationfactory.createobject%28VS.96%29.aspx
試しにusingでくくって書いてやると、普通にコンパイルも通り、(少なくとも表面上は)動作しました。
#参照カウンタが実際にどうなっているかまでは解らないですが。
と言う事は、SilverlightのCOMラッパーは、今までのRCWと異なり、VB6の自動参照カウンタのような機能を内包している……ということなのでしょうか。
引き続き、何か情報がありましたらよろしくお願いいたします。
きよくらならみ2010年1月21日 5:46 -
Silverlight 4がベータ版なので、仕様変更の可能性がありますが、参考までに。
ComAutomationFactory.CreateObject/GetObjectメソッドは、ComAutomationMetaObjectProviderクラスを利用しているので、不要なオブジェクトは、nullを代入するか、Disposeメソッドを呼び出しておけばいいと思います。
http://msdn.microsoft.com/en-us/library/ee519675(VS.96).aspx
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。- 回答としてマーク Kiyokura 2010年2月3日 14:43
2010年2月3日 2:57