COM是微軟公司爲了計算機工業的軟件生產更加符合人類的行爲方式開發的一種新的軟件開發技術。在COM構架下,人們能夠開發出各類各樣的功能專注的組件,而後將它們按照須要組合起來,構成複雜的應用系統。網絡
COM組件的優勢:函數
①能夠將系統中的組件用新的替換掉,以便隨時進行系統的升級和定製;工具
②能夠在多個應用系統中重複利用同一個組件;ui
③能夠方便的將應用系統擴展到網絡環境下;spa
④COM組件的特性是與語言無關和與平臺無關的(最重要的特性)。COM能夠被各類不一樣的語言如Java,C#, PB,VB,Delphi等調用。3d
.NET(C#)建立的COM組件在VB6.0和VC6.0中以COM組件形式調用,調用「*.tlb」文件;而在VB.NET 和C#中應以.NET程序集形式調用,調用時,直接引用「*.dll」文件便可。orm
一、建立C#類庫,名稱爲CLCOMTestInCSharp,以下圖對象
二、在「解決方案資源管理器」(CTRL+W,S)中,類「Class1.cs」改名爲「CAdd.cs」,並在彈出的對話框選項中選擇「是」。以下圖blog
三、添加接口「IAdd」,並使類「CAdd」繼承接口「IAdd」,代碼以下繼承
namespace CLCOMTestInCSharp
{
public interface IAdd
{
/// <summary>
/// 加法運算
/// </summary>
/// <param name="num1">整數1</param>
/// <param name="num2">整數2</param>
/// <returns>返回兩數字之和</returns>
int Add(int num1, int num2);
}
public class CAdd:IAdd
{
/// <summary>
/// 構造函數
/// </summary>
public CAdd()
{ }
/// <summary>
/// 加法運算
/// </summary>
/// <param name="num1">整數1</param>
/// <param name="num2">整數2</param>
/// <returns>返回兩數字之和</returns>
public int Add(int num1, int num2)
{
return num1 + num2;
}
}
}
四、文檔最上方添加命名空間「System.Runtime.InteropServices」的引用語句。
using System.Runtime.InteropServices;
五、經過菜單「工具」「建立GUID」建立GUID,以下圖
六、「IAdd」接口上方使用該GUID,以下:
[Guid("058B0D56-360E-489c-BF19-567BEBF74C82")]
public interface IAdd
七、一樣的方法在類「CAdd」的上方再生成添加一個GUID
[Guid("C6926C48-02CC-44db-8C07-B70F4E11F300")]//類GUID
[ClassInterface(ClassInterfaceType.None)]//不爲類生成類接口
public class CAdd:IAdd
八、完整代碼以下圖
九、打開「解決方案資源管理器」,打開「AssemblyInfo.cs」,將[assembly: ComVisible(false)]設爲true。
十、右擊該類庫項目,選擇「屬性」「生成」,將「爲COM互操做註冊」選中。如圖
十一、右擊項目,「生成」。將生成「CLCOMTestInCSharp.dll」、「CLCOMTestInCSharp.tlb」、「CLCOMTestInCSharp.pdb」三個文件
一、在VB6.0中新建工程「標準EXE」。在窗體上添加一個「CommandButton」控件,並將其Caption屬性設爲「VB6.0調用C#寫的COM組件」
二、在工程引用中選擇「CLCOMTestInCSharp」,以下圖
三、雙擊「CommandButton」,爲其添加以下代碼
Private Sub Command1_Click()
Dim add As CAdd '定義類Add的對象
Set add = New CAdd
Dim num1, num2, num3 As Long '定義變量
num1 = 1
num2 = 2
num3 = 0
num3 = add.add(num1, num2) 'COM組件調用
MsgBox "1+2=" & num3
Set add = Nothing '
End Sub
注意:C#中的int類型,轉化到VB中變爲long類型
四、執行程序。結果以下圖:
一、新建「MFC AppWizard(exe)」的「基本對話框」工程。並在窗體上添加一個按鈕,將其標題設爲「使用VC6.0調用C#寫的COM組件」
二、將用C#生成的組件「CLCOMTestInCSharp.tlb」拷貝到VC的工程目錄和生成目錄。
三、添加引用
#import "CLCOMTestInCSharp.tlb"
using namespace CLCOMTestInCSharp;
四、爲按鈕添加以下代碼
long num1,num2,num3;//定義變量
num1=1,num2=2,num3=0;
CoInitialize(NULL);
IAddPtr p_Add(__uuidof(CAdd));
num3 = p_Add->Add(num1,num2);
p_Add.Release();
p_Add = NULL;
CoUninitialize();
CString strTemp;
strTemp.Format("%ld",num3);
MessageBox("1+2="+strTemp);
注意:C#中的int類型,轉化到VC中變爲long類型
五、運行結果,以下圖:
一、使用VB.NET建立「Windows 窗體應用程序」項目,命名爲「COMTest」。
二、在窗體上添加一個Button,並將其Text屬性設爲「使用VB.NET調用C#建立的COM組件」
三、將「CLCOMTestInCSharp.dll」複製到程序目錄,添加引用,選擇「瀏覽」,以下圖
四、雙擊「Button」按鈕,添加以下代碼
Dim add As CLCOMTestInCSharp.CAdd '添加CAdd類的對象
add = New CLCOMTestInCSharp.CAdd
Dim num1, num2, num3 As Integer '定義變量
num1 = 1
num2 = 2
num3 = 0
num3 = add.Add(num1, num2) '調用COM組件
add = Nothing
MessageBox.Show("1+2=" & num3.ToString()) '消息顯示結果
五、執行程序,結果以下圖所示
一、建立「Windows 窗體應用程序」,並命名爲「COMTest」
二、在窗體上添加一個Button,並將其Text屬性設爲「使用C#調用C#建立的COM組件」
三、將「CLCOMTestInCSharp.dll」複製到程序目錄,添加引用,選擇「瀏覽」
四、雙擊Button爲其添加以下代碼。
private void button1_Click(object sender, EventArgs e)
{
CLCOMTestInCSharp.CAdd add = new CLCOMTestInCSharp.CAdd();//定義Add類的對象
int num1, num2, num3;//定義變量
num1 = 1; num2 = 2; num3 = 0;//變量初始化
num3 = add.Add(num1, num2);//調用COM
MessageBox.Show("1+2="+num3.ToString());//使用消息顯示結果
}
五、執行程序,結果略。