尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440



我试图通过包含另一个名为INvRtrProtocolEx3Itf的接口来向COM对象添加一些功能。但是我在编译时遇到了错误。我已经研究了错误代码,该页面给出了一些错误示例以及如何修复它,但没有一个显示使用 COM_INTERFACE_ENTRY 方法的示例。

我在这里找到了类似的问题,问题 1 和问题 2,但它们都指的是BEGIN_MESSAGE_MAP错误而不是BEGIN_COM_MAP错误......

我是COM的新手,但我正在从事一个广泛使用它的项目。我正在使用另一个COM对象作为参考,该对象使用我尝试添加的接口,但现在我被困在修复此错误的地方。如何获取要编译的 COM 对象或在哪里可以解决问题?

这是代码

BEGIN_COM_MAP(CNvRtrProtocolXxxImpl)
COM_INTERFACE_ENTRY(INvRtrProtocolXxxItf)
COM_INTERFACE_ENTRY(INvRtrProtocol4Itf)
COM_INTERFACE_ENTRY(INvComponent3Itf)
//added the following line to add another interface
COM_INTERFACE_ENTRY(INvRtrProtocolEx3Itf) //throws error 1 (C2440)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP() //throws error 2 (C2440)

错误 1

error C2440: 'static_cast': cannot convert from 'CNvRtrProtocolXxxImpl::_ComMapClass *' to 'INvRtrProtocolEx3Itf *'

错误 2

error C2440: 'initializing': cannot convert from 'ATL::_ATL_CREATORARGFUNC (__cdecl *)' to 'DWORD_PTR'

我对_IDTExtensibility2也有同样的问题。就我而言,此页面上提出的解决方案解决了该问题。

cd C:Program Files (x86)Common FilesDesigner
regsvr32 MSADDNDR.dll

然后编译神奇地工作。

最新更新