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.运行后执行结果如下:

C# 开发COM组件供c++使用的更多相关文章

  1. C#开发COM组件供其他开发环境或工具调用介绍(转)

    由于工作原因涉及到这一块的开发,由于之前并未接触过,所以本篇文章也是在参考了各种资料后,自己实现并通过通过测试之后所整理的备忘录以及一些个人观点. 希望对刚接触这类型开发的朋友有所帮助,若有不足之处还 ...

  2. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  3. 使用OC开发phonegp 组件

    使用OC开发phonegp 组件 1. 使用oc 对phonegp中的组件近些开发,首先具体的pgonegp跟nativecode之间的一些优劣就不说了,开发phonegp 对应的组件主要就是使用na ...

  4. 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError

    报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...

  5. web前端开发常用组件

    web前端开发常用组件 1. 对话框(dialog):jbox(适合对话框等其它功能).colorbox(也很强大,可以弥补jbox图片轮播的落点),      这二者基本能搞定所有对话框的情况 2. ...

  6. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...

  8. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  9. [js开源组件开发]query组件,获取url参数和form表单json格式

    query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...

随机推荐

  1. ES中的查询操作

    1.前缀查询 先输入数据: PUT /my_index/address/ { "postcode": "W1 3DG" } PUT /my_index/addr ...

  2. npm 命令行基本操作

    npm命令选项选项            说明search 在存储库中查找模块包 npm search expressinstall  使用在存储库或本地位置上的一个package.json文件来安装 ...

  3. java线程中的同步锁和互斥锁有什么区别?

    两者都包括对资源的独占. 区别是 1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,也没有固定的执行顺序. 2:同步是线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务.

  4. Spring Boot自定义Redis缓存配置,保存value格式JSON字符串

    Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...

  5. .net中对象序列化技术

    序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...

  6. new、virtual、override

    我们先看下面一段程序: public class Father { public void Run0() { Console.WriteLine("Father.Run0"); } ...

  7. Java并发编程实战 第16章 Java内存模型

    什么是内存模型 JMM(Java内存模型)规定了JVM必须遵循一组最小保证,这组保证规定了对变量的写入操作在何时将对其他线程可见. JMM为程序中所有的操作定义了一个偏序关系,称为Happens-Be ...

  8. deepin 常见快捷键及常用命令

    常用命令 1)安装软件命令行:dpkg -i <.deb file name>示例:dpkg -i avg71flm_r28-1_i386.deb2)安装一个目录下面所有的软件包命令行:d ...

  9. 指数家族-Beta分布

    2. Beta分布 2.1 Beta分布 我们将由几个问题来得引出几个分布: 问题一:1:  2:把这个  个随机变量排序后得到顺序统计量  3:问  是什么分布 首先我们尝试计算  落在一个区间   ...

  10. 设计模式Design Pattern(4) -- 访问者模式

    什么是访问者模式? 一个对象有稳定的数据结构,却为不同的访问者提供不同的数据操作,对象提供接收访问者的方法,从而保证数据结构的稳定性和操作的多样性.也可以理解为,封装对象的操作方法,达到不改变对象数据 ...