0

私は、いくつかの管理された COM 可視 C# DLL を使用する必要があるネイティブ C++ プロジェクト (/clr が有効) に取り組んでいます。管理対象オブジェクトの一部は IDisposable を実装しており、それらに対して Dispose() を呼び出したいと考えています。どうやってやるの?

コードは次のようになります。

HRESULT hr = CoInitialize(NULL);
IManagedClassPtr pIObj(__uuidof(ManagedClass));
//do stuff with pIObj
...
//dispose of pIObj somehow
...
CoUninitialize();
4

1 に答える 1

2

まず、必要がなければ、COM を使用しないでください。

C++/CLI は、C++ と .Net 言語の間の簡単なインターフェイスを提供するように設計されています。

C++/CLI で .Net オブジェクトを作成する場合は、参照変数を 指定してgcnewを使用するだけです。

メソッドを持つ .Net クラスはDispose()、C++/CLI でもそれを持ちます。違いは、C++/CLI で ref クラス (.Net 参照クラス) を宣言すると~destructor、Dispose メソッドになることです。
これ!finalizerは、GC によって実際に呼び出されるものです。

とにかく、Dispose() メソッドを使用して .Net オブジェクトを作成すると、次のことが可能になります。

MyDisposable^ m = gcnew MyDisposable();
m->Dispose();
于 2013-05-17T11:09:47.227 に答える