MFC程序中添加ICONTEXTMENU菜单 VS2005编译错误
来源:互联网 发布:知乎开放注册时间 编辑:程序博客网 时间:2024/05/24 06:31
想在自己的MFC程序中添加ICONTEXTMENU菜单,于是找到了这篇文章:
自己动手写一个简单的Windows shell扩展程序
但是按照作者指示下载的代码是VC6的代码,在VS2005下编译,会有错误提示
BEGIN_COM_MAP(CImportShellExt)
COM_INTERFACE_ENTRY(IImportShellExt)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IShellExtInit)
COM_INTERFACE_ENTRY(IContextMenu)
END_COM_MAP()
第五行代码出错,错误信息为;
1>d:\test\importshell\importshell\importshellext.h(46): error C2787: 'IContextMenu' : no GUID has been associated with this object
1>d:\test\importshell\importshell\importshellext.h(46) : error C2440:'initializing' : cannot convert from 'DWORD_PTR' to 'const IID *'
1> Conversion from integral type to pointer typerequires reinterpret_cast, C-style cast or function-style cast
1>d:\test\importshell\importshell\importshellext.h(46) : error C2440:'initializing' : cannot convert from 'ATL::_ATL_CREATORARGFUNC (__stdcall *)'to 'DWORD_PTR'
查找到了如下的解决方法:
VS2005& VS2008对C++转换中问题总结
以下转自此篇文章:
1、转换VS6.0
学习 ATL,看到 http://www.codeproject.com/shell/shellextguide1.asp,测试了一下,发现 VC6 编译通过,VC8在
COM_INTERFACE_ENTRY(IContextMenu)
处提示错误:
no GUIDhas been associated with this object
其实上面 URL的文章,已经给出解决方案了,就是升级 Platform SDK,并把 $(VCInstallDir)PlatformSDK\include 放在 Include目录第一位,或者不放第一也至少要在 ($VCInstallDir)include前面!
我自己发现的办法是,
1> 加一句定义:
struct __declspec(uuid("000214E4-0000-0000-C000-000000000046"))IContextMenu;
2> 不要用
COM_INTERFACE_ENTRY(IContextMenu)
换成
COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
同时要
#include <shlguid.h>
当然第一种方法是最好的,在写WTL 程序时也要求这样做,不过要是暂时没条件升级 Platform SDK,倒是可以先用用另外两个办法。
2. vs2008->vs2005 (本人试验过,确实有效)
VS2008.sln .vcproj 转VS2005
编译个WowModelViewer就不用装VS2008了。
.sln文件中:
Microsoft Visual Studio Solution File, Format Version10.00
# Visual Studio 2008
修改为
Microsoft Visual Studio Solution File, Format Version9.00
# Visual Studio 2005
.vcproj文件中:
<<>="VisualC++"Version="9.00"Name="wowmodelview"ProjectGUID="{DCA0C667-2A7A-4FCE-AD02-466F7A380E0C}"RootNamespace="wowmodelview"<>="Win32Proj"<>="131072<>
开头的这句把9.00改为8.00就可以了。
3.建议vc项目用vs2005
4.无法打开,can not open files即无法找到该文件,归因于包含目录设置需要修改。
以VS2005为例:
需要修改以下三个包含目录:
i、c++编译器-》常规-》附加包含目录。
ii、link链接器-》附加包含目录。
iii、资源-》附加包含目录。
修改办法如下:
1> 注意路径设置是否有误。
2> 尽量将相对路径改为绝对路径。
5.生产lib文件
The first step iscreate an import library. Start a MSVS Command Prompt, and go to the GnuTLSinstallation directory.
<def:libgnutls-26.def FilesGnuTLSbin>lib>
This willcreate a libgnutls-26.lib that can be used as a import library for VisualStudio projects.
Build asample program to test it as follows:
< C:Program 1.6.0foo FilesGnuTLSbin>foo ... libgnutls-26.lib -Dssize_t="long"include -I.. foo.c FilesGnuTLSbin>cl>
Thesesteps are not fully polished yet, but appear to work.
- MFC程序中添加ICONTEXTMENU菜单 VS2005编译错误
- VS2005中添加右键菜单
- MFC 对话框程序 添加菜单
- Wince中MFC对话框中添加菜单项的做法 (平台是VS2005)
- vs2005 MFC 添加成员函数错误
- VS2012中,为MFC程序添加右键菜单
- VS2012中,为MFC程序添加右键菜单
- VS2013 中MFC程序编译过程出现 RC2108错误
- VS 2013 中MFC程序编译过程出现 RC2108错误
- MFC 基于对话框程序添加菜单项
- vs2005 添加右键菜单
- MFC中Dialog中添加菜单
- MFC的对话框中添加右键菜单
- 在MFC对话框中添加菜单
- MFC指定控件中添加右键菜单
- mfc在窗口中添加右键菜单
- MFC指定控件中添加右键菜单
- MFC中为菜单命令添加快捷键
- B. Little Pony and Sort by Shift
- Unity3D NGUI按钮背景转换
- 函数名称
- A3的Android 2.1的多点触摸电容屏3G智能手机凭借双核和Appleui
- 黑马程序员-交通灯
- MFC程序中添加ICONTEXTMENU菜单 VS2005编译错误
- 类的构造函数、析构函数与赋值函数(二)构造函数的初始化表
- 关于gemotion的各种报错
- hdu-oj 1431 素数回文
- java批量创建文件
- Sprague-Grundy函数
- 开拓思路学物理 学习方法
- 设计模式——访问设计模式
- 另一条路去IOE:全内存数据库弯道超车