作者:朱金燦
來源:http://blog.csdn.net/clever101
?????
??? ?????????簡單介紹C#程序如何調用ATL編寫的COM組件。
?
首先新建一個ATL工程,具體如下:
1. 填寫工程名稱和路徑,如下圖: ???
2. 選擇工程的服務器類型為動態鏈接庫,如下圖:
3. 添加一個ATL簡單對象,如下圖:
4. 填寫類名稱,如下圖:
5. 選擇類的線程模型及其它屬性,如下圖:
6. 為接口類添加一個方法,如下圖:
7. 填寫方法名及輸入輸出參數,如下圖:
8. 設置IDL接口屬性,這里采用默認設置即可,如下圖:
為剛才新建的Add方法添加代碼,具體如下:
STDMETHODIMP CMathCalc::Add(LONG Num1, LONG Num2, LONG* Ret)
{// TODO: 在此添加實現代碼assert(NULL!=Ret);*Ret = Num1+Num2;return S_OK;
}
???? 然后編譯工程,生成一個dll形式的COM。
?
第二步新建一個C#控制臺測試工程,具體如下:
1. 填寫控制臺工程名稱及路徑,如下圖:
2. 添加一個新的庫引用,如下圖:
3. 選擇剛才新生成的COM——MathCom 1.0類型庫,如下圖:
4. 在Program.cs中添加如下代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathComLib; // 注意使用命名空間namespace TestMathCom
{class Program{static void Main(string[] args){int a = 2;int b = 3;int lRetVal = 0;MathCalc MyMathCalc = new MathCalc();MyMathCalc.Add(a, b,out lRetVal); // 注意這里有一個out關鍵字System.Console.Write(lRetVal.ToString());System.Console.WriteLine("\nPress Enter to continue.");System.Console.ReadLine();}}
}
?
效果圖如下:
?
??????
問題:
1.C#調用COM接口,在參數類型中必須是C#的int類型而不是long類型對應COM的long類型,為什么呢?
?
?
?
?
?
?
?
?
?
?
?
?