使用QueryInterface方法的目的是什么?(Direct3D)

Soo*_*ter 4 c++ direct3d

我了解QueryInterface方法的实际作用-它仅返回指向特定接口的指针。但是我的问题是,为什么我要使用这种方法?

我的意思是,两者之间有什么区别

QueryInterface(__uuidof(IDXGIResource), (void**)&Resource)

IDXGIResource * Resource

这些不是差不多吗?如果是这样,我为什么还要使用该方法?由于什么原因我应该使用它?

Mar*_*som 6

COM假定单个对象将提供多个接口,即这些接口将具有细粒度,并且您一次要使用多个接口。QueryInterface是如何获得指向对象上其他接口的指针。

您的示例不完整。第一个未显示QueryInterface正在从现有接口调用,第二个未向指针分配任何值(这是未初始化的指针)。一个实际的例子可以将两者结合起来:

IDXGIResource * Resource = NULL;
pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource);
Run Code Online (Sandbox Code Playgroud)

为了稳健起见,应在尝试使用指针之前确保QueryInterface调用成功

if (SUCCEEDED(pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource))
    Resource->DoSomething();
Run Code Online (Sandbox Code Playgroud)