在C ++ / CLI包装器中释放COM对象的最佳方法

时间:2012-08-08 18:26:09

标签: .net com c++-cli com-interop

我想创建一个C ++ / CLI包装器,它可以帮助我将一些PIA类型转换为非托管类型。这是一个代码示例:

void DoSomething(SomeInteropLibrary::InteropObject obj)
{
    IComInterface* pComInterface = NULL;
    IntPtr comInterfacePointer = Marshal::GetIUnknownForObject(obj);
    IUnknown* punkComInterface = static_cast<IUnknown*>(comInterfacePointer.ToPointer());
    punkComInterface->QueryInterface(__uuidof(IComInterface), (void**)&pComInterface);

    //Do something with pComInterface...

    pComInterface->Release();
    Marshal::Release(comInterfacePointer);
}

IComInterface是我的COM接口,obj是来自PIA的互操作类型,我是从类型库生成的。

我对如何正确释放资源感兴趣。我应该第二次致电Marshal::Release,因为它写在方法Marshal::GetIUnknownForObject的文档中,或者我可以重复pComInterface->Release()吗?

0 个答案:

没有答案