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和一个引用变量。

具有Dispose()方法的 .Net 类也将在 C++/CLI 中具有它。不同之处在于,如果您在 C++/CLI 中声明一个 ref 类(.Net 引用类),那么它~destructor会变成一个 Dispose 方法。
!finalizer是 GC 实际调用的内容。

因此,无论如何,如果您使用 Dispose() 方法创建一个 .Net 对象,您将能够做到这一点:

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