C#開發COM組件供其他開發環境或工具調用介紹(轉)


由於工作原因涉及到這一塊的開發,由於之前並未接觸過,所以本篇文章也是在參考了各種資料后,自己實現並通過通過測試之后所整理的備忘錄以及一些個人觀點。

希望對剛接觸這類型開發的朋友有所幫助,若有不足之處還望不吝賜教。

廢話不多說,下面就是教學式內容了,第一次寫,沒有文采勿見怪。

 

開發環境: .Net Framework 4.0

開發工具: Microsoft Visual Studio 2010

測試環境: Windows XP、.Net Framework 4.0

測試工具: Delphi7、PowerBuilder8.0

 

注意:

1、每個COM組件所有對外公布的方法都必須通過接口形式實現;

2、由於.Net下編譯的COM組件並等同於C編譯的COM組件,所以存在必須在運行目標機器注冊的情況,對此.Net下編譯的COM組件必須為程序進行簽名,即強命名密鑰;

 

步驟:

1、 新建一個類庫項目(文件—新建—項目—類庫【命名:HK.NetPBDemo】)

2、 針對“注意第一點要求”,新建一個接口文件(項目右鍵—添加—新建項—接口【命名:IHK.cs】)

3、 IHK.cs接口文件編碼:

int TestFunction(int num, string str1, string str2, double db);

4、 將Class1.cs 改名為:HKTest.cs (這步其實很啰嗦,不過文檔都整理了,就這樣寫吧)

提示框點擊“是”,如下圖

5、 HKTest.cs 類文件編碼:

添加名稱空間:using System.Runtime.InteropServices;

實現接口、並在類頭添加屬性:[ClassInterface(ClassInterfaceType.None)]。如下圖

6、 在“解決方案資源管理器”中找到節點“Properties”打開AssemblyInfo.cs文件

如下圖

7、 將[assembly: ComVisible(false)]屬性改成[assembly: ComVisible(true)]

如下圖

8、 項目右鍵—屬性、或者雙擊“Properties”節點,進入到項目屬性設置界面

  8.1、選擇“應用程序”選項卡,點擊“程序集信息”按鈕,如下圖

    

  8.2、勾選“使程序集COM可見”,確定。如下圖

  

  8.3、選擇“生成”選項卡,在底部“輸出”欄目下,勾選“為COM互操作注冊”。如下圖

  

  8.4、選擇“簽名”選項卡。

  8.4.1、勾選“為程序集簽名”;

  8.4.2、在“選擇強名稱密鑰文件”的下拉框選擇“<新建…>”

  8.4.3、在“密鑰文件名稱”輸入:HK.NetPBDemo.snk(任意命名,snk后綴即可)

  8.4.4、去掉“使用密碼保護密鑰文件”,確定。

  【8.4.3、8.4.4】如下圖

  

9、 編譯項目。

10、 打開vs指令窗,如下圖

11、 運行指令:

gacutil /i DLL路徑\HK.NetPBDemo.dll 將這個DLL加入的全局緩存里

regasm DLL路徑\HK.NetPBDemo.dll 注冊這個dll

如下圖

附:以上11個步驟即可完成COM組件在本機的環境下注冊並提供調用。

1、 若要在其他機器使用必須把編譯的“DLL”、“TLB”文件一並復制在目標機器(已安裝.Net Framework環境)並放在需調用的程序根目錄;

2、 在目標機器“c:\WINDOWS\Microsoft.Net\Framework\v4.0.3.319”下找到“RegAsm.exe”,該路徑是我的安裝路徑,如果沒有就搜索下“RegAsm.exe”這個東東吧。【我的環境:虛擬機、系統WindowsXP、.Net Framework 4.0】

3、 運行CMD打開指令窗,講路徑定位到“c:\WINDOWS\Microsoft.Net\Framework\v4.0.3.319”,

運行指令:regasm.exe DLL路徑\ HK.NetPBDemo.dll。 如下圖【注冊成功】

 

 

 

 

二、DELPHI調用

1、 打開Delphi7,File—Close All

2、 Project—Import Type Library,點擊“Add”按鈕選中剛才編譯后的“tlb”COM文件【HK.NetPBDemo.tlb】點擊“Create Unit”如下圖

3、 Project—Import Type Library,在列表中選中剛才添加的組件,點擊“Install..”按鈕。

如下圖

4、 File—New—Application,添加一個button按鈕,然后在“ActiveX”選項卡選擇剛才添加的組件,添加至項目。如下圖

5、 Delphi 關鍵代碼

Button1、HKTest1 均為自動生成對象,只要在Button的OnClick事件即可實現COM方法

procedure TForm1.Button1Click(Sender: TObject);
var
rst:Integer;
int:Integer;
str1:string;
str2:string;
db:Double;
begin
int:=8;
str1:='這是恆康提供COM組件調用例子';
str2:='該例子用的是Delphi調用';
db:=2.8;
rst:=HKTest1.TestFunction(int,str1,str2,db);
showmessage(inttostr(rst));
end;

 引用別人的例子:Demo下載


免責聲明!

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



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