您的位置:首页 > 运维架构 > Shell

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

2010-07-28 14:07 603 查看
最近开始用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扩展编程完全指南例子一中的问题解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: