zoukankan      html  css  js  c++  java
  • C# 开发COM组件供c++使用

    C# 开发COM组件供c++使用

     

    Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用以及.NET如何调用SDK中的Windows库函数。

    本文在学习网上资料的基础上,实现用C#开发组件供C++使用的过程。

     

    编程环境:vs2015 (COM组件) vs2005 c++调用 操作系统 win10

     

    一.C#COM组件

    1.新建一个C#类库项目:ExcelCom  (原计划做一个EXCEL的com)

     

    2.在项目中添加接口

    C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数

     

    Guid可通过 Tool -> 创建GUID产生

     

    接口DoExcel的编写

        public interface DoExcel
    
        {
    
            [DispId(1)]  //如果需要添加其他函数,继续加 [DispId(2)]  ...
    
            int Plus(int a, int b);
    
        }

    3.添加一个ExcelOperate类继承接口DoExcel

    using System.Runtime.InteropServices;

     

     

    4. 修改AssemblyInfo.cs文件中[assembly: ComVisible(false)]

     

    项目->属性->生成下 选中"为COM互操作注册“

     

    5.生成解决方案

    生成解决方案,成功才可。生成的文件ExcelCom.dll文件。

    6.COM注册

    COM 注册后才能使用。

    注册过程:管理员身份运行cmd.进入C:WindowsMicrosoft.NETFrameworkv2.0.50727

    注意:自己系统上安装的.net版本

    输入”RegAsm D:CAAProjExcelComExcelCominDebugExcelCom.dll /tlb:ExcelCom.tlb /codebase“

     

    COM卸载与注册过程基本相同,只需将命令改为

    “RegAsm  /u  D:CAAProjExcelComExcelCominDebugExcelCom.dll  /tlb: COMLib.tlb  /codebase”

     

    提示成功注册后,及可在C++上引用了(可在项目目录下是否成功生成了ExcelCom.tlb文件)

     

    二.C++引用COM组件

    1.新建一个C++程序(控制台程序即可),本例中是ExcelComDemo

    2.将ExcelCom.tlb拷贝到ExcelComDemo下的ExcelComDemo文件中。

    3.创建一个调用代码

    #include "stdafx.h"
    
    #include <Windows.h>
    
    #include <string.h>
    
    #include <iostream>
    
    using namespace std;
    
    #import "ExcelCom.tlb" named_guids raw_interface_only
    
     
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
    CoInitialize(NULL);
    
    ExcelCom::DoExcelPtr  ptr;  //接口
    
    ptr.CreateInstance(ExcelCom::CLSID_ExcelOperate);//实例化一个类 CLSID_ 类名
    
    long a = 1;
    
    long * lPtr = &a;
    
    long AA = ptr->Plus(1,2);
    
    cout<<AA<<endl;
    
            system("pause");
    
    return 0;
    
    }
    
     

    4.运行后执行结果如下:

     

     

  • 相关阅读:
    luogu4781
    luogu 4933
    luogu p1726
    bzoj2238
    luogu 1462 通往奥格瑞玛的道路
    noip.ac 3276 矩阵
    luogu1144
    noip.ac 3248
    奶牛比赛
    小P的Civilization V
  • 原文地址:https://www.cnblogs.com/allencxw/p/9469600.html
Copyright © 2011-2022 走看看