创建新的应用程序或组件时,最好创建 .NET Framework 程序集。但使用 Visual Basic 2005 也易于将 .NET Framework 组件公开到 COM。这使您可以为需要 COM 组件的旧式应用程序提供新组件。本演练演示如何使用 Visual Basic 将 .NET Framework 对象作为 COM 对象公开,包括使用和不使用 COM 类模板。
公开 COM 对象的最简单的途径是使用 COM 类模板。COM 类模板创建一个新类,然后配置您的项目以生成作为 COM 对象的类和操作性层并在操作系统注册。
![]() |
---|
尽管可以将使用 Visual Basic 创建的类作为 COM 对象公开以供非托管代码使用,但它并非真正的 COM 对象,且不能供 Visual Basic 使用。有关更多信息,请参见 .NET Framework 应用程序中的 COM 互操作性。 |
![]() |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
使用 COM 类模板创建 COM 对象
-
在“文件”菜单中单击“新建项目”,以打开新的 Windows 应用程序项目。
-
在“项目类型”字段下的“新建项目”对话框中,检查是否已选定 Windows。从“模板”列表中选择“类库”,再单击“确定”。将显示新项目。
-
从“项目”菜单中选择“添加新项”。显示“添加新项”对话框。
-
从“模板”列表中选择“COM 类”,再单击“添加”。Visual Basic 添加一个新类,并为 COM Interop 配置新项目。
-
将代码(如属性、方法和事件)添加到 COM 类。
-
从“生成”菜单中选择“生成 ClassLibrary1”。Visual Basic 生成程序集,并在操作系统注册 COM 对象。

可以手动创建一个 COM 类,而不使用 COM 类模板。当从命令行工作或想要更好地控制如何定义 COM 对象时,该过程较有帮助。
设置项目以生成 COM 对象
-
在“文件”菜单中,单击“新建项目”,以打开新的 Windows 应用程序项目。
-
在“项目类型”字段下的“新建项目”对话框中,检查是否已选定 Windows。从“模板”列表中选择“类库”,再单击“确定”。将显示新项目。
-
在“解决方案资源管理器”中,右击您的项目,然后单击“属性”。将显示“项目设计器”。
-
单击“编译”选项卡。
-
选中“为 COM Interop 注册”复选框。
在您的类中设置代码以创建 COM 对象
-
在“解决方案资源管理器”中,双击“Class1.vb”,以显示其代码。
-
将该类重命名为 ComClass1。
-
将下列常数添加到 ComClass1。它们将存储 COM 对象必须有的全局唯一标识符 (GUID) 常数。
Visual BasicPublic Const ClassId As String = "" Public Const InterfaceId As String = "" Public Const EventsId As String = ""
-
若要获取全局唯一标识符 (GUID),请启动 Guidgen.exe 以启动 Guidgen 实用工具。从 Guidgen 应用程序提供的格式列表中选择“注册表格式”。单击“新建 GUID”按钮以生成 GUID,再单击“复制”按钮将该 GUID 复制到剪贴板。
-
用 GUID 替换 ClassId 的空字符串,移除前导大括号和尾随大括号。例如,如果 Guidgen 提供的 GUID 为 "{2C8B0AEE-02C9-486e-B809-C780A11530FE}",则代码应如下所示。
Visual BasicPublic Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"
-
为 InterfaceId 和 EventsId 常数重复上面的步骤,如下例所示。
Visual BasicPublic Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91" Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31"
注意
请确定 GUID 是新的和唯一的,否则您的 COM 组件可能与其他 COM 组件冲突。
-
将 ComClass 属性添加到 ComClass1,为类 ID、接口 ID 和事件 ID 指定 GUID,如下面的示例所示:
Visual Basic<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _ Public Class ComClass1
-
COM 类必须具有一个无参数的 Public Sub New() 构造函数,否则该类无法正确注册。向该类中添加一个无参数构造函数:
Visual BasicPublic Sub New() MyBase.New() End Sub
-
将属性、方法和事件添加到该类,并以 End Class 语句结束它。从“生成”菜单中选择“生成解决方案”。Visual Basic 生成此程序集并在操作系统注册此 COM 对象。
注意
其他 Visual Basic 2005 应用程序不能使用您用 Visual Basic 2005 生成的 COM 对象,因为它们不是真正的 COM 对象。试图将引用添加到此类 COM 对象会引发错误。有关详细信息,请参见 .NET Framework 应用程序中的 COM 互操作性。
引用:http://msdn.microsoft.com/zh-cn/library/x66s8zcd(VS.80).aspx