Step by Step: 基于MFC下的COM组件开发-Helloworld
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
最近在研究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的更多相关文章
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- 基于Vue的数字输入框组件开发
1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...
- 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...
- 基于GBT28181:SIP协议组件开发-----------第一篇环境搭建
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3930018.html,qq:1269122125. SIP协议在安 ...
- 【转载】基于MFC的ActiveX控件开发(1)
原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一 ...
随机推荐
- Webrtc服务器搭建<转>
http://blog.csdn.net/zqf_office/article/details/49851209
- intellij idea打包springboot项目
一.可执行jar包 注意点: maven的package类型需要为jar 配置了spring-boot-mavne-plugin插件 1.1.pom.xml <?xml version=&quo ...
- Python之整数,浮点数和布尔类型
整数和浮点数有那个四则运算: 两种类型的数可以直接进行加减,当整数和浮点数进行加减的时候,结果会自动的变为浮点数,其中除法运算是“/”来表示的, 而余数的算术符号是“%”来表示的.如果是为了求除完后的 ...
- 百度地图SDK v2.1.2使用方法
1.开发工具 Android开发工具有很多,开发者可根据自己的喜好进行选择.在此,我们推荐开发者使用Eclipse作为自己的开发工具,本套开发指南也是针对Eclipse开发环境下进行编写的. 2.工程 ...
- git pull没有指定branch的报错
执行git pull或者git push的时,有时候会出现如下报错: $ git pull You asked me to pull without telling me which branch y ...
- Educational Codeforces Round 56 (Rated for Div. 2) E(1093E) Intersection of Permutations (树套树,pb_ds)
题意和分析在之前的链接中有:https://www.cnblogs.com/pkgunboat/p/10160741.html 之前补题用三维偏序的cdq的分治A了这道题,但是感觉就算比赛再次遇到类似 ...
- 杭电acm 1076题
水题,一个求闰年的题目,复习一下闰年的求法.... 1,如果能被4整除但不能被100整除的是闰年 2,能被400整除的是闰年 题目大意是:给定一个开始年份T以及一个正数N,要求求出从T开始,到了哪一年 ...
- BuilderPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- 718C Sasha and Array
传送门 题目 Sasha has an array of integers a1, a2, ..., an. You have to perform m queries. There might be ...
- 1003 NOIP 模拟赛Day2 城市建设
题面不好找放一个吧. Description 描述 在有$N$个地级市的H省,政府为了城市开发建设,决定先修路,后造房子,以吸引外来人员.一开始每个城市中有$b_i$个住户,而在两个城市$u,v$之间 ...