如果我有两个COM接口(interface)指针(即ID3D11Texture2D),并且想检查它们是否是相同的基础类实例,是否可以直接比较两个指针是否相等?我已经看过代码,在比较完成之前将其转换为其他代码,因此想确认一下。

BOOL IsEqual (ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2)
{
    if (pTexture1 == pTexture2)
    {
        return true;
    }
    else
    {
        return false;
    }
}

谢谢。

最佳答案

正确的COM方法是使用IUnknown查询接口(interface)。 MSDN中的here注释引述:



所以正确的代码是

BOOL IsEqual (ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2)
{
    IUnknown *u1, *u2;

    pTexture1->QueryInterface(IID_IUnknown, &u1);
    pTexture2->QueryInterface(IID_IUnknown, &u2);

    BOOL areSame = u1 == u2;
    u1->Release();
    u2->Release();

    return areSame;
}

更新
  • 添加了对Release的调用,因此减少了引用计数。感谢您的好评。
  • 您也可以将ComPtr用于此作业。请在MSDN中查找。
  • 09-05 19:08