使用.NET2.0 編寫COM組件供Visual Basic調用
1.定義接口
Com是通過拋出接口讓外部應用調用的,每個接口、組件都有一個Guid,在.Net中開發(fā)Com組件也不例外。
[Guid(“0bb13346-7e9d-4aba-9ff2-862e0105489a”)]
public interface IMyService
{
//定義接口方法或者屬性,每個方法或屬性都有一個DISPID屬性,供VBScript等使用
[DispId( 1 )]
void Method1( args … );
}
2.實現(xiàn)接口的派生類
//Guid屬性定義組件的Guid
//ProgID定義Com組件的ProgID
[Guid(
"ba0a3019-f0d8-4406-8116-f80d5515c686" ) ,
ProgId("ClassNamespace.MyService"),
ClassInterface(
ClassInterfaceType.None)]
public class
MyService : IMyService
{
…… //實現(xiàn)代碼部分
}
3.將.Net裝配件轉換為公有裝配件
(1)創(chuàng)建強名字
sn –k mykey.snk
并將強名字拷貝到工程目錄下面
在AssembyInfo.cs修改對應的配置
[assembly: AssemblyKeyFile(“../../mykey.snk”)]
(2)導出類型庫
為了在VB中使用,必須使用tlbexp.exe導出Com類型庫。
tlbexp SisCalLib.dll /out:SisCalLib.tlb
(3注冊裝配件
RegAsm MyService.dll
(4)將裝配件加入GAC
gacutil -i MyService.dll
注意:該步驟不是必須的。
(5)在AssembyInfo.cs修改COM對外可見性配置
// 將 ComVisible 設置為 false 使此程序集中的類型
// 對 COM 組件不可見。如果需要從 COM 訪問此程序集中的類型,
// 則將該類型上的 ComVisible 屬性設置為 true。
[assembly: ComVisible(true)]
// 如果此項目向 COM 公開,則下列 GUID 用于類型庫的 ID
[assembly: Guid("e011ed16-93a3-41aa-8375-399fa259b935")]
經(jīng)過上面的工作,就將一個.NET裝配件轉化為COM組件。
4.在VB中調用生成的COM組件(dll)
1)工程->引用
2)創(chuàng)建對象調用