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:\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 = 1;

long * lPtr = &a;

long AA = ptr->Plus(1,2);

cout<<AA<<endl;

        system("pause");

return 0;

}

 

 

4.運行后執行結果如下:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM