http://blog.csdn.net/sybifei/article/details/45008745

【这篇文章有问题, 仅供参考】

http://blog.csdn.net/define_us/article/details/50114127

【这篇文章C#调用可以,但VC调用存在问题,仅供参考】

Step by Step: 基于MFC下的COM组件开发-Helloworld

原创 2015年04月12日 11:48:03
  • 559

最近在研究COM组件的开发,于是便想找一个完整的COM Helloworld例程,搜索的结果是要么代码繁复,要么就是不够完整。在此特将COM的建模步骤以图文并貌的方式写下,以飨后来者。

开发环境:Visual Studio 2013


Step 1-3:

新建一个MFC DLL 工程,工程名称我们可以命名为COMHelloworld 

注意勾选附加功能中的 “自动化” 模块 

在MFC生成的项目COMHelloworld.cpp,我们可以看到构成一个COM组件的基本框架,MFC模板已经为我们搭建好了,下面可以建立Helloworld了

Step 2-3:

添加COM类 CTest,并添加接口 Helloworld 
选择”项目”->”添加类…”,添加一个”MFC 类”,其中基类选择”CCmdTarget”,自动化方式选择为 “可按类型 ID 创建” 

创建完成后,在类视图中为ITest添加接口 Helloworld 
 

Step 3-3:

上述准备工作完成,终于可以编写 HelloWorld 代码了!

void CTest::HelloWorld()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加调度处理程序代码
AfxMessageBox(_T("Hello World!"));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

多么简单,你只写了一行代码,一个最简单的COM组件构建完成了。 
等等,也许我们还需要测试一下这个COM是否可以运行…


1. MFC 中调用 COM

在现有工程中添加一个新工程 “基于对话框的MFC应用程序”,然后在该工程中选择”项目”->”添加类…”->选中”添加TypeLib 中的 MFC 类” 

在可用类型库中选择 “COMHelloworld”,点击按钮  生成所有类,见下图

在对话框程序中添加一个测试按钮,并添加该按钮的点击事件… 
在对话框程序中添加COM类的头文件

#include "CTest.h"
  • 1

在按钮点击事件中添加测试代码

void CMFCApplicationDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CTest test;
COleException e; if (test.CreateDispatch(_T("COMHelloworld.Test"), &e))
{
test.HelloWorld();
test.ReleaseDispatch();
}
else
TRACE("CreateDispatch() failed, COM Error Codes: 0x%08lX\n", e.m_sc);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

COM调用中常见的错误代码: 
0x800401F0 OLE模块没有初始化,需要在程序初始化时添加 
0x800401F3 检查一下你的 COM 调用字串是否书写正确,在本例中COM调用字串是”COMHelloworld.Test”

COM Error Codes (Generic) 
https://msdn.microsoft.com/en-us/library/windows/desktop/dd542643%28v=vs.85%29.aspx

好了,测试运行! 


2. C# 中调用 COM

新建一个窗口类的工程,然后添加引用 “COMHelloworld” 
 

在窗口中添加测试按钮,添加按钮点击事件处理代码

        private void button1_Click(object sender, EventArgs e)
{
COMHelloworld.TestClass test = new COMHelloworld.TestClass();
test.HelloWorld();
}
  • 1
  • 2
  • 3
  • 4
  • 5


本示例的完整代码下载地址: 
http://download.csdn.net/detail/sybifei/8586725

Step by Step: 基于MFC下的COM组件开发-Helloworld的更多相关文章

  1. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  2. 最全的基于MFC的ActiveX控件开发教程

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

  3. 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

  4. 基于Vue的数字输入框组件开发

    1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...

  5. 饿了么基于Vue2.0的通用组件开发之路(分享会记录)

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

  6. 基于vue2.0的分页组件开发

    今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...

  7. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  8. 基于GBT28181:SIP协议组件开发-----------第一篇环境搭建

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3930018.html,qq:1269122125. SIP协议在安 ...

  9. 【转载】基于MFC的ActiveX控件开发(1)

    原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一 ...

随机推荐

  1. 空中楼阁 ( House )最短路

    题目描述: 话说Z4阴差阳错地来到了神秘岛.不久,他们发现,这是一个由n个小岛和一个中心岛组成的群岛,群岛之间有m座桥.令他们感到惊讶的是,这些桥并不是固定不变的,经较长时间的观察,发现它们会随时间作 ...

  2. DDD学习笔录——提炼问题域之知识提炼与协作

    提炼问题域的意义 理解一个复杂问题域以便创建简单且有用的模型需要深入详尽的知识以及深刻的见解,这些只能通过与从内到外理解该领域的人协作得到.对模型的设计进行连续实验和探究正是DDD的能力所能实现的.只 ...

  3. 问题:window7任务计划时;结果:Win7 下如何添加任务计划呢

    Win7 下如何添加任务计划呢 1.点击“开始”--->“所有程序”--->"附件"--->"系统工具"2.选择“任务计划程序” 如下图所示: ...

  4. tomcat中间件配置说明

    因为Tomcat 技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器.目前最新版本是8.0. 方法/步骤   一.tomca ...

  5. The R Project for Statistical Computing

    [Home] Download CRAN R Project About R Contributors What’s New? Mailing Lists Bug Tracking Conferenc ...

  6. bash: telnet: command not found

    //安装telnet服务 yum -y install telnet-server //安装telnet客户端 yum -y install telnet.*

  7. 解决html中的乱码问题

    1.最简单粗暴的方法就是加一个meta标签,不过值得我们注意的是我们的meta标签是与我们的head标签是同一级的,所以千万不能将meta标签加到我们的head标签中. <meta http-e ...

  8. powerdesigner自动将name填充到注释的脚本

    我在建模的时候,希望在生成脚本的时候有注释,所以才会看到Comment列,实际上,只要你的表中的Name列不为空,运行下面的VBScript,PD会帮你自动填充注释的Comment列值. '把pd中那 ...

  9. Ros疑问汇总

    一.机器人描述文件三个: 机器人主体body文件: gazebo属性文件: 主文件 smartcar.urdf: 二.启动文件smartcar_display.rviz.launch:启动节点和模拟器 ...

  10. General框架如何实现多数据库支持

    关于用C#实现多数据库支持的方式,大家都会多少了解,本文从General框架的开发思路角度详细介绍General框架实现多数据库支持的方式,使更多的人了解General框架的底层实现并得到所需的相关知 ...