1

我想创建一个 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()

4

0 回答 0