上篇文章提到,目前項目想做到核心部分代碼不被反編譯,而考慮到團隊成員都是比較熟悉C#,因此 核心演算法部分採用C++,而其他地方則採用C#(例如資料訪問層,介面層都使用C#語言)。在上一篇文章 中完成了C#Managed 程式碼調用C++Unmanaged 程式碼,現在接著完成第二部分,即C++Unmanaged 程式碼調用C#Managed 程式碼,分 為兩部分,首先C#建立COM+組件,其次是C++調用COM+組件。
C#建立COM+組件
1. 在VS中,建立類庫ComInterop
2. 在類庫新增介面:ComInteropInterface, 及相應的實現ComInterop, ComInterop同時必須繼 承自ServicedComponent。ComInteropInterface中有兩個簡單介面:
int Add(int a, int b);
int Minus(int a, int b);
具體代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using System.EnterpriseServices;
namespace ComInteropDemo
{
//介面聲明
[Guid("7103C10A-2072-49fc-AD61-475BEE1C5FBB")]
public interface ComInteropInterface
{
[DispId(1)]
int Add(int a, int b);
[DispId(2)]
int Minus(int a, int b);
}
//對於實作類別的聲明
[Guid("87796E96-EC28-4570-90C3-A395F4F4A7D6")]
[ClassInterface(ClassInterfaceType.None)]
public class ComInterop : ServicedComponent, ComInteropInterface
{
public ComInterop() { }
public int Add(int a, int b)
{
return a + b;
}
public int Minus(int a, int b)
{
return a - b;
}
}
}