您的位置:首页 > 其它

错误 C2787 时构建项目使用 ATL 3.0

2010-03-23 10:58 531 查看
各位高手能帮我解决下面的问题吗?为什么会出现下列问题?
Hook.cpp
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2787: “IShellExecuteHookA”: 没有与该对象关联的 GUID
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2440: “初始化”: 无法从“DWORD_PTR”转换为“const IID *”
从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2440: “初始化”: 无法从“ATL::_ATL_CREATORARGFUNC (__stdcall *)”转换为“DWORD_PTR”
没有使该转换得以执行的上下文
ShowHook.cpp
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2787: “IShellExecuteHookA”: 没有与该对象关联的 GUID
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2440: “初始化”: 无法从“DWORD_PTR”转换为“const IID *”
从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
c:/documents and settings/administrator.e5a23b0b99c7427/桌面/ch08/hook/showhook.h(34) : error C2440: “初始化”: 无法从“ATL::_ATL_CREATORARGFUNC (__stdcall *)”转换为“DWORD_PTR”
没有使该转换得以执行的上下文
正在生成代码...
生成日志保存在“file://c:/Documents and Settings/Administrator.E5A23B0B99C7427/桌面/Ch08/Hook/Debug/BuildLog.htm”
Hook - 6 个错误,0 个警告


升级您的网上冲浪体验




不再显示

中国大陆 更改 |微软站点地图
微软帮助和支持



搜索微软帮助和支持



整个Microsoft.com



互联网



中文



英文



帮助和支持首页

选择产品支持中心

高级搜索

下载与更新

社区或论坛

产品购买

联系微软

文章编号: 192561 - 最后修改: 2003年12月10日 - 修订: 2.0

PRB: 错误 C2787 时构建项目使用 ATL 3.0


点击这里查看逐句中英文对照机器翻译


查看机器翻译免责声明
查看本文应用于的产品

本页



症状




原因




解决方案




状态




更多信息




示例代码




参考


展开全部 | 关闭全部

症状
生成使用 ATL 3.0 的项目时可能会收到一个编译器错误 c2787 (没有 GUID 已与此对象关联)。

生成使用 ATL 3.0 的项目时可能会收到一个编译器错误 c2787 (没有 GUID 已与此对象关联)。


回到顶端


原因
较新版本的 MIDL 使用编译器设施 [__declspec(uuid())] 标记到它生成的头文件中的接口的 GUID。ATL 版本 3.0 使用这一事实 C...

较新版本的 MIDL 使用编译器设施 [__declspec(uuid())] 标记到它生成的头文件中的接口的 GUID。ATL 版本 3.0 使用这一事实 COM_INTERFACE_ENRY 宏的实现中 ; 现在,它使用关键字 __uuidof() 从 MIDL 生成标头中提取接口 ID。ATL 2.1 使用标记粘贴运算符 (IID_ ##IFoo) 获取接口 id。此操作要求包括 MIDL 生成标头和也在"project_i.c",MIDL 生成。

如果您使用 ATL 3.0 的较旧的 MIDL 生成的头文件 [这不会使用 __declspec(uuid())],您将获得此编译器错误,因为 __uudiof() 不能提取接口 id。


回到顶端


解决方案
在项目设置对话框中的 C/c + + 选项卡中定义的预处理器符号 _ATL_NO_UUIDOF。这将强制 ATL 使用标记粘贴运算符 (#) 而不是 __uui...

在项目设置对话框中的 C/c + + 选项卡中定义的预处理器符号 _ATL_NO_UUIDOF。这将强制 ATL 使用标记粘贴运算符 (#) 而不是 __uuidof() 时形成接口 id。


回到顶端


状态
此行为是设计使然。

此行为是设计使然。


回到顶端


更多信息
示例代码 COM_INTERFACE_ENTRY in ATL 2.1 #define COM_INTERFACE_ENTRY(x)/ {&IID_##x),...

示例代码

[code]   COM_INTERFACE_ENTRY in ATL 2.1

#define COM_INTERFACE_ENTRY(x)/
{&IID_##x), /
offsetofclass(x, _ComMapClass), /
_ATL_SIMPLEMAPENTRY},

COM_INTERFACE_ENTRY in ATL 3.0

#ifndef _ATL_NO_UUIDOF
#define _ATL_IIDOF(x) __uuidof(x)
#else
#define _ATL_IIDOF(x) IID_##x
#endif

#define COM_INTERFACE_ENTRY(x)/
{&_ATL_IIDOF(x), /
offsetofclass(x, _ComMapClass), /
_ATL_SIMPLEMAPENTRY},

[/code]

较新的 MIDL 标头文件使用该宏 DECLSPEC_UUID() 或 MIDL_INTERFACE(),__declspec(uuid()) 来展开。MIDL 版本 3.01.75 和以后使用 __declspec 指令。


回到顶端


参考
"移植从 ATL 2.1"联机帮助中。 (c) Microsoft Corporation 1998,保留的所有权限。通过贡献 Jaganathan Thang...

"移植从 ATL 2.1"联机帮助中。

(c) Microsoft Corporation 1998,保留的所有权限。通过贡献 Jaganathan Thangavelu,Microsoft 公司。


回到顶端


这篇文章中的信息适用于:

Microsoft ActiveX Template Library 3.0 当用于

Microsoft Visual C++ 6.0 企业版

Microsoft Visual C++ 6.0 专业版

Microsoft Visual C++, 32-bit Learning Edition 6.0



回到顶端


关键字:
kbmt kbmidl kbprb KB192561 KbMtzh


回到顶端



机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 192561 (http://support.microsoft.com/kb/192561/en-us/ )



回到顶端

Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

请提供关于这些信息的反馈

这些信息帮助解决问题了吗?

我不知道
这些信息和问题是相关的吗?

您认为我们怎样才能提高这些信息的质量呢?

为了保护您的隐私,请不要在您的反馈中提及联系信息。

非常感谢!您的反馈将被用来改进我们的支持内容。更多的帮助选项,请访问微软帮助和支持主页.

其他资源

其他帮助资源

常见问题自动诊断和修复

易宝典情景式帮助

小易博客

Office 在线

产品支持中心

帮助和操作方法

Microsoft 合作伙伴网络

社区或论坛

微软问答

MSDN开发人员论坛

Technet IT专业人士论坛

马上获得帮助



微软客服首页

文章翻译

阿拉伯语德语法语繁体中文韩国语捷克共和国语葡萄牙语葡萄牙语(巴西)日语西班牙语意大利语英语 (US)

页面工具

打印此页

通过电子邮件发送此页



需要更多帮助?

请通过电子邮件、联机或电话与支持工程师联系
技术支持与服务
服务协议
联系微软|保留所有权利|商标|隐私权声明




©2010 Microsoft


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: