zoukankan      html  css  js  c++  java
  • 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

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

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

    开发环境:Visual Studio 2013


    Step 1-3:

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

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

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

    Step 2-3:

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

    创建完成后,在类视图中为ITest添加接口 Helloworld 
    为ITest添加接口 
    这里写图片描述

    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
    ", 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

    好了,测试运行! 
    MFC COM测试


    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

    C# 调用COM测试


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

  • 相关阅读:
    奶牛碑文
    快速幂算法——人见人爱A^B
    杨辉三角
    iis404 没有设置mime的后缀
    jquery的click和js的funcition中的参数不一样
    asp:timer的权限与操作注意
    .net 文件上传,只上传修改的东西
    vscode的配置 和xdebug配制
    emoji编码后存储
    php 服务器请求其它网页的方法
  • 原文地址:https://www.cnblogs.com/okgogo2000/p/8064321.html
Copyright © 2011-2022 走看看