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()]  //如果需要添加其他函数,继续加 [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:\Windows\Microsoft.NET\Framework\v2.0.50727

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

输入”RegAsm D:\CAAProj\ExcelCom\ExcelCom\bin\Debug\ExcelCom.dll /tlb:ExcelCom.tlb /codebase“

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

“RegAsm  /u  D:\CAAProj\ExcelCom\ExcelCom\bin\Debug\ExcelCom.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 = ;

long * lPtr = &a;

long AA = ptr->Plus(,);

cout<<AA<<endl;

        system("pause");

return ;

}

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

最新文章

  1. PRINCE2项目管理七大流程之指导流程
  2. 【转】Android选项卡置底的方法
  3. win版本对比
  4. 基于AutoCAD的ObjectARX之NET扩展(mcnetarx)-AcdbEntMake
  5. android 入门- 词汇
  6. angular-ngSanitize模块-linky过滤器详解
  7. TKinter事件及绑定
  8. Xamarin.Android MVP模式
  9. linq数据使用
  10. STM32的GPIO使用的函数剖析
  11. OpenCV2学习笔记04:图像的读取与显示
  12. Android 写文件到手机
  13. fontresize 移动端的手机字体 大小设置
  14. bugfree搭建
  15. UltraEdit-32 温馨提示:右协会,取消 bak文件
  16. 在ASP.NET MVC中使用IIS级别的URL Rewrite
  17. Chapter 2 User Authentication, Authorization, and Security(10):创建包含数据库
  18. ERP承接新后台优惠规则问题
  19. CF962F Simple Cycles Edges
  20. SQLI DUMB SERIES-3

热门文章

  1. Linux之RedHat7如何更换yum源
  2. [工具] BurpSuite--Scanner功能
  3. php正则表达式修饰符详解
  4. 批量修改zencart产品价格、原价、特价、产品属性价格
  5. Java并发编程实战 第16章 Java内存模型
  6. 【HDU2089】不要62
  7. 【30分钟学完】canvas动画|游戏基础(7):动量守恒与多物体碰撞
  8. CentOS源码编译安装MySQL 5.5.15
  9. JAVA笔记23-IO流(1)
  10. gitlab docker中postgresql远程访问配置