我正在开发一个本机C ++项目(/ clr enabled),它必须使用一些托管的,COM可见的C#DLL。一些托管对象实现了IDisposable,我想在它们上调用Dispose()。我怎么能这样做?
代码看起来像这样:
HRESULT hr = CoInitialize(NULL);
IManagedClassPtr pIObj(__uuidof(ManagedClass));
//do stuff with pIObj
...
//dispose of pIObj somehow
...
CoUninitialize();
答案 0 :(得分:2)
首先,如果您不必,请不要使用COM。
C ++ / CLI旨在提供C ++和.Net语言之间的简单接口。
如果要在C ++ / CLI中创建.Net对象,只需将 gcnew 与引用变量一起使用即可。
。具有Dispose()
方法的.Net类也将在C ++ / CLI中使用它。 The difference 是指如果在C ++ / CLI中声明ref类(.Net引用类),则~destructor
将变为Dispose方法。
!finalizer
是GC实际调用的内容。
所以无论如何,如果你用Dispose()方法创建一个.Net对象,你就可以这样做:
MyDisposable^ m = gcnew MyDisposable();
m->Dispose();