我理解QueryInterface方法实际上做了什么 - 它只返回指向特定接口的指针。但我的问题是,为什么我要使用这种方法?
我的意思是,
之间有什么区别 QueryInterface(__uuidof(IDXGIResource), (void**)&Resource)
和
IDXGIResource * Resource
这些几乎不一样吗?如果是这样,为什么我甚至需要使用该方法?我应该使用它的原因是什么?
答案 0 :(得分:4)
COM假设单个对象将提供多个接口,即接口将是细粒度的,并且您希望一次使用多个接口。 QueryInterface
是指向对象上其他接口的指针。
您的示例不完整。第一个没有显示从现有接口调用QueryInterface
,第二个没有向指针分配任何值(它是一个未初始化的指针)。一个实际的例子将两者结合起来:
IDXGIResource * Resource = NULL;
pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource);
为了保持健壮,您应该在尝试使用指针之前确保QueryInterface
调用succeeded。
if (SUCCEEDED(pInterface->QueryInterface(__uuidof(IDXGIResource), (void **)&Resource))
Resource->DoSomething();