首先建立一个类库的项目
comLib
之后编写一个接口,
COM
要调用的对象实现这个接口,和一个实现这个接口的类,如果要在
VB
或
ASP
中用
CreateObject
创建对象需要有一个没有参数的构造函数
。代码如下:
using
System;
using
System.Windows.Forms;
namespace
comLib
{
//
定义接口,这点很重要 (此接口中的方法与COM组件中的方法一致)
public interface iClass1
{
void Say(string word);
}
public class Class1 : iClass1
{
public void Say(string word)
{
MessageBox.Show(word);
}
}
}
|
然后运行
运行
Visual Studio 2005 .net
命令提示符,执行
sn –k comLib.snk
,生成一个
SNK
签名文件
comLib.snk
。
为了使类型在
COM
中可见需要在
AssemblyInfo.cs
文件中设置这么一项
[assembly: ComVisible(true)]
。在些文件中添加一项[assembly: AssemblyKeyFile("
文件路径
\\comLib.snk
"
)]
在解决方案资源管理器中选择工程
->
单击右键
->
选择
”
属性
”->
选择
”
生成
”
选项卡
->
将
”
为
COM Interop
注册
”
选中,这样项目造成时就会自动注册
COM
组件。
生成项目后,就可以进行
COM
调用了。这里以
VB
为例,新建一个
EXE
工程,添加对
comLib.tlb
的引用,些文件在
bin
目录下。然后使用下面的代码调用
Option Explicit
Private Sub Form_Load()
Dim ic As iClass1
Set ic = New Class1
ic.Say "Hello Jerry!"
'
在
ASP
中要用这种方式
Dim a
Set a = CreateObject("comLib.Class1")
End Sub
|
运行工程后就会出现个消息框。说明调用成功。
上面的
COM
注册是自动注册但有些时候要手动注册,比如你做的类型库要在别的计算机上使用,耍那台计算机没有
Visual Studio 2005
。手动注册有以下几个步骤:
(1)
使用
regasm
工具对程序集进行注册,运行
Visual Studio 2003 .net
命令提示,执行
regasm comLib.dll /tlb:comLib.tlb
(2) 之后使用 gacutil 工具将 DLL 程序集安装到全局程序集缓存中,也是先运行 Visual Studio 2003 .net 命令提示 , 再执行 gacutil /i comLib.dll
(2) 之后使用 gacutil 工具将 DLL 程序集安装到全局程序集缓存中,也是先运行 Visual Studio 2003 .net 命令提示 , 再执行 gacutil /i comLib.dll
附上源文件下载:ClsIn.rar