1.
定义接口
Com 是通过抛出接口让外部应用调用的,每个接口、组件都有一个 Guid ,在 .Net 中开发 Com 组件也不例外。
[Guid(“0bb13346-7e9d-4aba-9ff2-862e0105489a”)]
public interface IMyService
{
// 定义接口方法或者属性,每个方法或属性都有一个 DISPID 属性,供 VBScript 等使用
[DispId( 1 )]
void Method1( args … );
}
Com 是通过抛出接口让外部应用调用的,每个接口、组件都有一个 Guid ,在 .Net 中开发 Com 组件也不例外。
[Guid(“0bb13346-7e9d-4aba-9ff2-862e0105489a”)]
public interface IMyService
{
// 定义接口方法或者属性,每个方法或属性都有一个 DISPID 属性,供 VBScript 等使用
[DispId( 1 )]
void Method1( args … );
}
2. 实现接口的派生类
//Guid 属性定义组件的 Guid
//ProgID 定义 Com 组件的 ProgID
[Guid(
"ba0a3019-f0d8-4406-8116-f80d5515c686" ) ,
ProgId("ClassNamespace.MyService"),
ClassInterface(
ClassInterfaceType.None)]
public class
MyService : IMyService
{
…… // 实现代码部分
}
3. 将 .Net 装配件转换为公有装配件
(1) 创建强名字
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
注意:该步骤不是必须的。
gacutil -i MyService.dll
注意:该步骤不是必须的。
(5)
在
AssembyInfo.cs
修改
COM
对外可见性配置
//
将
ComVisible
设置为
false
使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 属性设置为 true 。
[assembly: ComVisible(true)]
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 属性设置为 true 。
[assembly: ComVisible(true)]
//
如果此项目向
COM
公开,则下列
GUID
用于类型库的
ID
[assembly: Guid("e011ed16-93a3-41aa-8375-399fa259b935")]
[assembly: Guid("e011ed16-93a3-41aa-8375-399fa259b935")]
经过上面的工作,就将一个
.NET
装配件转化为
COM
组件。
4.
在
VB
中调用生成的
COM
组件
(dll)
1)
工程
->
引用
2)
创建对象调用