• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ShellCOM从VC6移植到VC2003或2005的问题

ShellCOM从VC6移植到VC2003或2005的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc6兼容性问题,vc6兼容问题,vc6存在兼容性问题,vc2003,vc2003运行库等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: Shell COM 从 VC6 移植到 VC2003或2005的问题
描述:

这个问题一直困扰着我。
拿Shell Interface IContextMenu 来说,在VC6中COM映射宏是这么写的:
BEGIN_COM_MAP(CCountLines)
...
COM_INTERFACE_ENTRY(IContextMenu)
...
END_COM_MAP()
COM类,或者叫ATL Object 类是这样继承的:
class ATL_NO_VTABLE CCountLines : 
...
public IContextMenu
在VC6中编译/连接都没有问题。
而在VC2003/2005中编译总会提示错误,错误定位在COM映射宏中的 COM_INTERFACE_ENTRY(IContextMenu)
提示信息为:
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'
我试过用其它映射宏来代替 COM_INTERFACE_ENTRY,比如:
COM_INTERFACE_ENTRY_IID()
这样,编译是通过了,可是程序没有效果,也就是说程序不会走到实现 IContextMenu 的接口函数中。
这个问题对于很多 Shell Interface 都遇见过,比如还有 IShellExecuteHook。
还有,VC2003/2005中的 实现COM 类接口的 Wizard 中,选择继承于 shell32.dll 中接口类时,怎么没有 IContextMenu 、IShellExecuteHook 这些类。如果能找到VC2003/2005正确的实现COM 类接口的 Wizard,看看VC是怎么自动生成代码的,也许以上问题就可以解决。


解决方案1:

There 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));


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • VC6与matlab70混编程,自己电脑没问题,别人电脑运行出错
  • 有关VC6中导入ACTIVEX的问题
  • VC2005和VC6编写OCX的问题
  • vc6使用DOSframer的基础问题!
  • VC6+GE6SetCamera异常,实在不知道问题在哪里?
  • VC6开发的OCX的问题
  • VC6的调试问题
  • vc7怎么没有vc6好用了,奇怪的问题啊
  • VC6下MFC多线程问题
  • VC6链接出错问题

相关文章

  • 2017-06-04 如何对一个windowless的ActiveX控件发消息?
  • 2017-06-05 关于引用第三方Dll的问题!!!!
  • 2017-06-05 关于线程函数的问题
  • 2017-06-05 请哪位大哥给我发一份DDE编程的资料
  • 2017-06-04 (500分求助!)***关于COM+EVENT***
  • 2017-06-05 IWebBrowser2
  • 2017-06-04 我的com用vc编译可以注册成功,但用regsvr32不行,why?急!
  • 2017-06-04 关于CAsyncSocket的一些疑惑,新手在这里请指教
  • 2017-06-04 sql语句汇总的问题
  • 2017-06-04 请问在PreTranslateMessage(MSGlpmsg)中如何调用OnLButtonDblClk()?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 初学DLL遇到问题请指教
    • DLL导出问题
    • 还是关于钩子的问题
    • 谁碰到这种怪问题??
    • CoInitializeSecurity
    • ==>为什么vc6用stl特别是string一大堆警告?
    • 求助,哪位用过MSN的桌面搜索接口ISearchDesktop
    • activex控件如何访问属性页的控件
    • 如何在控件中的Toolbar中显示Tooltips
    • 求大侠来分析一下这个函数:ExecuteSimTalk

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有