我正在努力理解与浏览器辅助对象有关的这个示例代码。
作者在其中实现了一个公开多个接口(IObjectWithSite,IDispatch)的单个类。
他的QueryInterface函数执行以下操作:
if(riid == IID_IUnknown) *ppv = static_cast<BHO*>(this);
else if(riid == IID_IObjectWithSite) *ppv = static_cast<IObjectWithSite*>(this);
else if (riid == IID_IDispatch) *ppv = static_cast<IDispatch*>(this);
我了解到从C的角度来看,接口指针只是指向VTable的指针。因此,我认为C++能够使用static_cast返回任何已实现接口的VTable。
这是否意味着以这种方式构建的类在内存中有许多VTable(例如IObjectWithSite、IDispatch等)?C++如何处理不同接口之间的名称冲突(它们各自具有QueryInterface、AddRef和Release函数),我能为每个接口实现不同的方法吗?