深入理解COM DLL的创建与注册

在本文中,将探讨如何手动创建一个COM DLL,并将其注册到Windows系统中。这个过程比使用Visual Studio 2005的向导要复杂得多,但对于那些想要深入了解COM DLL创建过程的开发者来说,这是一个宝贵的学习机会。

创建COM DLL项目

首先,需要在Visual Studio 2005中创建一个新的Visual Basic.NET类库项目。请严格按照以下步骤操作,以确保项目能够成功创建。

  1. 打开Visual Studio 2005。
  2. 点击文件菜单,选择新建项目。
  3. 在新建项目窗口中,选择“Visual Basic”作为项目类型,选择“类库”作为模板。
  4. 输入“MyComDemo”作为项目名称。
  5. 勾选“为解决方案创建目录”。
  6. 点击“确定”按钮完成创建。

编程类

Visual Studio在创建项目时会自动添加一个名为“Class1”的类。首先需要将这个类重命名为更有意义的名称,例如“MyCalculator”。

  1. 查看解决方案资源管理器(视图菜单 | 解决方案资源管理器)。
  2. 右键单击Class1.vb,选择重命名。
  3. 将文件名从“Class1.vb”更改为“MyCalculator.vb”。这将同时更改文件名和类名。

使类COM互操作

在编程类之后,需要使类COM互操作。首先,需要导入System.Runtime.InteropServices命名空间,以获取必要的互操作属性。

Imports System.Runtime.InteropServices

接下来,需要为类定义一个接口,因为这是COM客户端与COM对象通信的方式。将为类添加属性,这将自动为生成一个接口。

<ClassInterface(ClassInterfaceType.AutoDual)> _ Public Class MyCalculator <ComVisible(True)> _ Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer Return a + b End Function End Class

还需要为类添加一个GUID,这是一个128位的数字,用于在注册表中标识COM类型。

<Guid("YOUR-GUID-HERE")> _ Public Class MyCalculator ' ... End Class

最后,需要为程序集定义一个强名称,并将其安装到全局程序集缓存(GAC)中。

  1. 点击项目菜单,选择“MyComDemo属性…”。
  2. 点击签名标签页。
  3. 勾选“为程序集签名”复选框。
  4. 选择“新建…”从“选择强名称密钥文件”下拉列表。
  5. 创建强名称密钥窗口,输入文件名并确认密码(可选),然后点击确定。
  6. 保存并关闭属性窗口。

注册COM互操作库

在属性窗口中,点击编译标签页,然后勾选“注册为COM互操作”。

  1. 更改解决方案配置从Debug到Release,然后保存并编译项目。
  2. 打开Visual Studio命令提示符。
  3. 导航到编译后的.dll所在的目录(bin\Release文件夹)。
  4. 使用gacutil.exe工具将库安装到全局程序集缓存中。
  5. 使用regasm.exe工具将库注册到Windows注册表中。

在VB6中使用新的COM DLL

现在已经创建了一个可以在VB6中使用的COM DLL。让看看如何在VB6中使用它。

  1. 启动VB6。
  2. 在“新建项目”窗口中,选择“标准EXE”。
  3. 点击“打开”按钮。
  4. 向表单添加一个按钮,并双击它以创建Click()事件,并打开代码窗口。
  5. 添加对新COM DLL的引用。
  6. 在命令按钮的Click()事件中,添加以下代码以使用新库。
Private Sub Command1_Click() Dim calc As New MyCalculator Dim result As Integer result = calc.Add(5, 5) MsgBox result End Sub

要测试新的COM DLL,请运行VB6应用程序(F8或调试菜单 | 步入)。点击表单上的按钮。

清理

  1. 打开Visual Studio命令提示符。
  2. 导航到编译后的.dll所在的目录(bin\Release文件夹)。
  3. 在命令提示符下输入以下命令,然后按回车:
gacutil –u MyComDll.dll
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485