vs2005下Windows Shell扩展编程完全指南例子一中的问题解决

在VS2005中进行Windows Shell扩展编程时,可能会遇到错误,如GUID未关联、类型转换错误及注册输出失败。通过修改GUID、添加结构声明、更改注册输出设置以及设置自定义生成步骤,可以解决这些问题,顺利进行Shell扩展的开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始用vs2005学习Windows Shell扩展 编程,主要参考codeproject的几个经典例子 ,这几个经典例子 以前都是在vc6的环境下跑的,后来作者更新到vc7,网上还有好多教程是老版本的基于vc6环境的教程。vs2005属于vc8和vc7还是略有区别不过区别不大,现在把这两天学习的内容列下来,仅供参考。
1. 按照方法生成项目,系统会自动生成两个项目SimpleExt和SimpleExtPS,SimpleExtPS项目可以整个删掉,对结果没有什么影响。
2. 按照方法拷贝代码过来时,记得将教程中的GUID修改为自己的GUID,就是中括号中包含好多字符的那个。这个GUID可以在idl文件的“library SimpleExtLib”项下面找到。

3. 编译后出现错误提示:
error C2787: “IContextMenu”: 没有与该对象关联的 GUID
error C2440: “初始化”: 无法从“DWORD_PTR”转换为“const IID *”
1> 从整型转换为指针类型要求 reinterpret_cast、C 样式转换或函数样式转换
error C2440: “初始化”: 无法从“ATL::_ATL_CREATORARGFUNC (__stdcall *)”转换为“DWORD_PTR”
1> 没有使该转换得以执行的上下文

这个简单的用网上说的将包含文件PlatformSDK/include目录放在include目录前不适合vs2005,不能解决问题,倒是另一种方法可以解决,就是在SimpleShlExt.h文件中增加一行代码:
struct __declspec(uuid(“000214E4-0000-0000-C000-000000000046″)) IContextMenu;
若使用IQueryInfo的话要加入:
struct __declspec(uuid(“00021500-0000-0000-C000-000000000046″)) IQueryInfo;
4. 编译后出现错误提示:
1>正在注册输出…
1>Project : error PRJ0050: 未能注册输出。请确保您有修改注册表的相应权限。
1>生成日志保存在file://e:/project/shell/SimpleExt/SimpleExt/Debug/BuildLog.htm

这个问题需要在属性->配置属性->连接器->常规->注册输出项将“是”改为“否”即可。
5. 在项目的属性->自定义生成步骤->常规中设置命令行为:
regsvr32 /s /c “$(TargetPath)”
echo regsvr32 exec. time > “$(OutDir)/regsvr32.trg”
可自动注册dll,极为方便。
以上几个步骤基本可以保证实现预定功能。

原创文章,转载请注明: 转载自 袖子的博客

本文链接地址: vs2005下Windows Shell扩展编程完全指南例子一中的问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值