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

What is the purpose of using the QueryInterface method? (Direct3D)

我明白 QueryInterface 方法实际上做了什么 - 它只是 returns 一个指向特定接口的指针。但我的问题是,我为什么要使用这种方法?

我的意思是,

有什么区别

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

IDXGIResource * Resource

这些是不是很相似?如果是这样,为什么我什至需要使用该方法?我应该出于什么原因使用它?

COM 假定单个对象将提供多个接口,即接口将是细粒度的,您将希望一次使用多个接口。 QueryInterface 是获取指向对象上其他接口的指针的方式。

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

IDXGIResource * Resource = NULL;
pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource);

为了稳健,您应该确保 QueryInterface 在尝试使用指针之前调用 succeeded

if (SUCCEEDED(pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource))
    Resource->DoSomething();