no GUID has been associatedwith this object解决方法
?
1>error C2787: 'IInputObject' : no GUID has been associated withthis object
1>error C2440: 'initializing': cannot convert from 'DWORD_PTR' to 'const IID *'
1>error C2440: 'initializing': cannot convert from 'ATL::_ATL_CREATORARGFUNC (__stdcall*)' to 'DWORD_PTR'
?
之前把一个IE插件工程从VS2008转换为VS2005工程时,出现了上述的问题,这种提示成组出现(C2440是常见错误但是这里明显是C2787错误连带引发的),除了IInputObject这个接口还有其它的一些接口也会出现问题,经过观察和查看源代码,发现在VS2005的头文件里面类似这些接口在声明时,没有提供GUID的声明,但是之前的一些很熟悉的接口则是有的,譬如IDispatch接口:
#if defined(__cplusplus)&& !defined(CINTERFACE)
??
??? MIDL_INTERFACE("00020400-0000-0000-C000-000000000046")
IDispatch : publicIUnknown
?
而IInputObject的接口声明则没有了:
#undef? INTERFACE
#define INTERFACE?? IInputObject
?
DECLARE_INTERFACE_(IInputObject, IUnknown)
{
?
再看看引发错误的那句代码:
COM_INTERFACE_ENTRY(IInputObject)
分析这个宏的实现,发现里面有一句_ATL_IIDOF(x),正是这句的存在使得编译出错。
而在VS2005的头文件里面IID_IInputObject的定义是有的,因此可以想到使用COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)是不是就可以解决问题了?!
测试了一下编译通过o(∩_∩)o 。
?
P.S.
COM_INTERFACE_ENTRY宏定义:
#define COM_INTERFACE_ENTRY(x)\
????? {&_ATL_IIDOF(x),\
????? offsetofclass(x,_ComMapClass), \
????? _ATL_SIMPLEMAPENTRY},
COM_INTERFACE_ENTRY_IID宏定义:
#define COM_INTERFACE_ENTRY_IID(iid,x)\
????? {&iid,\
????? offsetofclass(x,_ComMapClass),\
????? _ATL_SIMPLEMAPENTRY},
?
作者:magictong