开发者社区> hopegrace> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

4、错误"no GUID has been associated with this object"的解决方法

简介: [问题描述] 用VS2008编译windows shell时,成功;相同的方法在VS2005下,提示错误: error C2787: 'IContextMenu' : no GUID has been associated with this object error C2440: 'initia...
+关注继续查看

[问题描述]<?xml:namespace prefix = o />

VS2008编译windows shell,成功;相同的方法在VS2005下,提示错误:

error C2787: 'IContextMenu' : no GUID has been associated with this object

error C2440: 'initializing' : cannot convert from 'DWORD_PTR' to 'const IID *'

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

[解决方法]

关键的问题是以下头文件没有包含正确

#include "shlobj.h"

#include "comdef.h"

#include <shlguid.h>

下面是收集的一些问题解决过程:

1Have you downloaded the Latest Platfrom SDK? If so, are your vc dirs pointing to the proper include dirs, eg: shlguid.h is getting picked up from the SDK\include and not the vc98\include. You set those in the tools-Options->directories->include dirs for VC

2There are two <comdef.h> header files in VC.NET, one in Vc7/include and the other in Vc7/PlatformSDK/include. The former splits off the smart pointer typedefs into comdefsp.h, and it doesn't include IContextMenu. The latter does. You can try to #include the PlatformSDK header directly, change your INCLUDE path order, or supply the missing typedef yourself, e.g.

struct __declspec(uuid("000214e4-0000-0000-c000-000000000046"))

IContextMenu;

_COM_SMARTPTR_TYPEDEF(IContextMenu, __uuidof(IContextMenu));

3、怎样找到InterfaceGUID?

我在注册表 HKCR\Interface\ 下可以找到形式为

{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}的键,如果其下有默认项="Interface",则说明这个键就是该InterfaceGUID

有没有其它方法?

(1) VC6\common\Tools 下有个OLE/COM Object Viewer 很方便,但在VC2005下就没找到这个工具

(2) PlatformSDK\include\comdef.h 中也有GUID的定义

4__uuidof它是C++ 运算符

[总结]

如上所述,如果把PlatformSDK/include放在前面仍然不可以的话,就下载新的SDK,把include目录包含进去就好了。个人感觉手动添加这些uuid值如,struct __declspec(uuid("000214e4-0000-0000-c000-000000000046"))

IContextMenu;

_COM_SMARTPTR_TYPEDEF(IContextMenu, __uuidof(IContextMenu));

过了这个村,还会有下个店,还不如直接更新一下SDK来得直接保险。

参考:

[1] 比较杂,没有记录出处。可以GOOGLE到。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
0 0
'str' object has no attribute 'get' 错误解决方案
'str' object has no attribute 'get' 错误解决方案
0 0
解决办法:找不到g_type_check_instance_cast
解决办法:找不到g_type_check_instance_cast
0 0
使用 some , every ,和 Object.values 检查对象内的值
使用 some , every ,和 Object.values 检查对象内的值
0 0
error C2220: 警告被视为错误 - 没有生成“object”文件
原文:error C2220: 警告被视为错误 - 没有生成“object”文件 这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。
1787 0
记一次奇怪的ORA-04028: cannot generate diana for object
      开发人员说新建了一个package,在编译的过程中出现了一些错误。提示为PL/SQL:ORA-00942: table or view does not exists。
856 0
error LNK2005 已经在***.obj中定义 的解决办法
为什么会出现这个错误??“error LNK2005: 已经在aaa.obj中定义” 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。
1159 0
TFS 客户端错误"Object reference not set to an instance of an object."
最近在打开CodePlex 的一个项目的时候,一直得到这个出错:"Object reference not set to an instance of an object."。我是通过"File->Source Control->Open From SourceControl"来打开项目的。
564 0
[方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
Guid ClsID = new Guid("d4ee9c52-8d68-4f33-9485-0926281c78ac");IList Ids = WebProduct.GetAllChildByID(ClsID);var query = db.T_Products.Where(p => Ids.Contains((Guid)p.F_ClsID));//这一句编译时无错,但是一执行,就报错 出错信息如下: 方法“Boolean Contains(System.Guid)”不支持转换为 SQL。
623 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载