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

时间:2023-03-09 09:52:56
Step by Step: 基于MFC下的COM组件开发-Helloworld

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

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

http://blog.****.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 
Step by Step: 基于MFC下的COM组件开发-Helloworld

注意勾选附加功能中的 “自动化” 模块 
Step by Step: 基于MFC下的COM组件开发-Helloworld

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

Step 2-3:

添加COM类 CTest,并添加接口 Helloworld 
选择”项目”->”添加类…”,添加一个”MFC 类”,其中基类选择”CCmdTarget”,自动化方式选择为 “可按类型 ID 创建” 
Step by Step: 基于MFC下的COM组件开发-Helloworld

创建完成后,在类视图中为ITest添加接口 Helloworld 
Step by Step: 基于MFC下的COM组件开发-Helloworld 
Step by Step: 基于MFC下的COM组件开发-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 类” 
Step by Step: 基于MFC下的COM组件开发-Helloworld

在可用类型库中选择 “COMHelloworld”,点击按钮 Step by Step: 基于MFC下的COM组件开发-Helloworld 生成所有类,见下图

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

在对话框程序中添加一个测试按钮,并添加该按钮的点击事件… 
在对话框程序中添加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

好了,测试运行! 
Step by Step: 基于MFC下的COM组件开发-Helloworld


2. C# 中调用 COM

新建一个窗口类的工程,然后添加引用 “COMHelloworld” 
Step by Step: 基于MFC下的COM组件开发-Helloworld 
Step by Step: 基于MFC下的COM组件开发-Helloworld

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

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

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


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