VC2010下创建的COM控件,MFC调用出错

qjgdftxmu 2014-08-06 03:48:43
只要一引用
#include "..\MapParseByCom\MapParse.h"就报错。

Com创建方法,很简单,创建一个ATL项目,然后再添加个ALT简单对象,创建的时候ProgID没有自动生成(VC2005创建的时候会自动生成的),所以就是用"项目名.Com名"作为ProgID。
...全文
273 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechiyang 2014-08-08
  • 打赏
  • 举报
回复
COM 是二进制的调用规范。 所有版本的VC、所有开发语言编译出的COM都一样用。
赵4老师 2014-08-07
  • 打赏
  • 举报
回复
使用VC 6.0 FileTool.exe 替换打开和添加到项目中 Visual C++ 的新功能 http://support.microsoft.com/kb/241396/zh-cn
边走边瞧 2014-08-07
  • 打赏
  • 举报
回复
引用 6 楼 qjgdftxmu 的回复:
[quote=引用 4 楼 fishion 的回复:] 一般都不用引用头文件的,只要import "xxx"no_namespace
我看过用这方法的教程,都是用VC6.0作为实例,我用这种方法在VC2010上试,照样也不行。不知道VC2010是不是对COM的使用有什么改变[/quote] 他说的是用#import导入.tlb文件,这个办法没问题。VS2010应该没那么水吧,多半是自己使用的有问题。
真相重于对错 2014-08-07
  • 打赏
  • 举报
回复
http://blog.csdn.net/jia_xiaoxin/article/details/3944889
qjgdftxmu 2014-08-07
  • 打赏
  • 举报
回复
引用 7 楼 hdt 的回复:
建议百度一下vc++如何利用com
额,这个我已经查过了。。。。VC6.0和2005都已经可以用了,只是2010出问题。 VC2010+COM的资料确实比较少
真相重于对错 2014-08-07
  • 打赏
  • 举报
回复
建议百度一下vc++如何利用com
qjgdftxmu 2014-08-07
  • 打赏
  • 举报
回复
引用 4 楼 fishion 的回复:
一般都不用引用头文件的,只要import "xxx"no_namespace
我看过用这方法的教程,都是用VC6.0作为实例,我用这种方法在VC2010上试,照样也不行。不知道VC2010是不是对COM的使用有什么改变
qjgdftxmu 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 go_and_see 的回复:
[quote=引用 2 楼 qjgdftxmu 的回复:] [quote=引用 1 楼 oyljerry 的回复:] 头文件路径是否正确
路径是对的,错误是这种。感觉像是配置的时候少东西了。
1>          due to following members:
1>          'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(116) : see declaration of 'IUnknown::QueryInterface'
1>          'ULONG IUnknown::AddRef(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(120) : see declaration of 'IUnknown::AddRef'
1>          'ULONG IUnknown::Release(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(122) : see declaration of 'IUnknown::Release'
[/quote] 看样子你是用ATL建了一个activeX控件。你是怎么用在MFC程序里的,能说下步骤吗,或者给出代码也行。这些提示,说明不了什么问题。[/quote] 我是看VC知识库的那个《COM实用入门教程》里讲的方法。 步骤很简单: 用MFC创建一个ALT项目,写上名字,然后所有的设置都不用改,直接创建。 再添加一个类,选择ATL简单对像,添加上一个COM控件,写上名字,其他的设置也不用改。(PS:测试的时间需要在控件上添加上方法,这里没有添加) 编译,会自会注册COM控件。 然后,就是在MFCk上测试COM控件,就是在stdafx.h中引用 com名.h 文件 ,stdafx.cpp中添加 com名_i.c 文件,就可以正常使用控件了。 就这几步,教程里用提VC2005,我用VC2005做的时候,也没有问题,不过用VC2010的时候就出现问题了。 VC2010在添加com控件的时候需要界面是一样的话,但有一点小小的不现,就是VC2005在给com控件加上名字的时候,其他所有的属性都会有默认的名字,不过VC2010有一个属性值不会有默认的名字,就是ProgID。
fishion 2014-08-07
  • 打赏
  • 举报
回复
一般都不用引用头文件的,只要import "xxx"no_namespace
边走边瞧 2014-08-07
  • 打赏
  • 举报
回复
引用 2 楼 qjgdftxmu 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 头文件路径是否正确
路径是对的,错误是这种。感觉像是配置的时候少东西了。
1>          due to following members:
1>          'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(116) : see declaration of 'IUnknown::QueryInterface'
1>          'ULONG IUnknown::AddRef(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(120) : see declaration of 'IUnknown::AddRef'
1>          'ULONG IUnknown::Release(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(122) : see declaration of 'IUnknown::Release'
[/quote] 看样子你是用ATL建了一个activeX控件。你是怎么用在MFC程序里的,能说下步骤吗,或者给出代码也行。这些提示,说明不了什么问题。
qjgdftxmu 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
头文件路径是否正确
路径是对的,错误是这种。感觉像是配置的时候少东西了。
1>          due to following members:
1>          'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(116) : see declaration of 'IUnknown::QueryInterface'
1>          'ULONG IUnknown::AddRef(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(120) : see declaration of 'IUnknown::AddRef'
1>          'ULONG IUnknown::Release(void)' : is abstract
1>          c:\program files\microsoft sdks\windows\v7.0a\include\unknwn.h(122) : see declaration of 'IUnknown::Release'
oyljerry 2014-08-06
  • 打赏
  • 举报
回复
头文件路径是否正确
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧