我有一个ATL课程:
class Foo :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<Foo, &CLSID_Foo>,
public IPlugin,
public IEventSubscriber
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
我需要将它传递给另一个对象,如下所示:
pOther->MethodTakingIUnknown(this);
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误消息:
error C2594: 'argument' : ambiguous conversions from 'Foo *const' to 'IUnknown *'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
双方IPlugin并IEventSubscriber都源于IUnknown所以C++不能自行决定的其中一个IUnknowns到投含蓄.你需要明确告诉C++你想要哪一个.有两个选项:要么调用GetUnknown()(在每个声明了COM映射的类中都可用):
pOther->MethodTakingIUnknown(GetUnknown());
Run Code Online (Sandbox Code Playgroud)
或显式转换this为其中一个基接口:
pOther->MethodTakingIUnknown( static_cast<IPlugin*>( this ) );
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您投射到哪个基本接口并不重要 - 只需转换为任何基础接口.只有当你实现IUnknown::QueryInterface()每次始终强制转换到同一个基础时才重要.
| 归档时间: |
|
| 查看次数: |
3089 次 |
| 最近记录: |