更新:2007 年 11 月
创建新的应用程序或组件时,最好创建 .NET Framework 程序集。但使用 Visual Basic 也易于将 .NET Framework 组件向 COM 公开。这使您可以为需要 COM 组件的早期应用程序套件提供新组件。本演练演示如何使用 Visual Basic 将 .NET Framework 对象作为 COM 对象公开,包括使用和不使用 COM 类模板。
公开 COM 对象的最简单的途径是使用 COM 类模板。COM 类模板创建一个新类,然后配置您的项目以生成作为 COM 对象的类和操作性层并在操作系统注册。
| .gif) 说明: | 
|---|
| 虽然还可以将用 Visual Basic 创建的类公开为 COM 对象以供非托管代码使用,但它并不是真正的 COM 对象,不能由 Visual Basic 使用。有关更多信息,请参见 .NET Framework 应用程序中的 COM 互操作性。 | 
| .gif) 说明: | 
|---|
| 显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请单击“工具”菜单上的“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 | 
使用 COM 类模板创建 COM 对象
- 在“文件”菜单上单击“新建项目”,以打开新的 Windows 应用程序项目。 
- 在“项目类型”字段下的“新建项目”对话框中,检查是否已选定 Windows。从“模板”列表中选择“类库”,再单击“确定”。将显示新项目。 
- 从“项目”菜单中选择“添加新项”。显示“添加新项”对话框。 
- 从“模板”列表中选择“COM 类”,再单击“添加”。Visual Basic 将添加一个新类,并对新项目进行 COM 互操作配置。 
- 将代码(如属性、方法和事件)添加到 COM 类。 
- 从“生成”菜单中选择“生成 ClassLibrary1”。Visual Basic 将生成程序集,并向操作系统注册 COM 对象。 
不使用 COM 类模板创建 COM 对象
可以手动创建一个 COM 类,而不使用 COM 类模板。使用命令行时或想要更好地控制如何定义 COM 对象时,此过程较有帮助。
设置项目以生成 COM 对象
- 在“文件”菜单上单击“新建项目”,以打开新的 Windows 应用程序项目。 
- 在“项目类型”字段下的“新建项目”对话框中,检查是否已选定 Windows。从“模板”列表中选择“类库”,再单击“确定”。将显示新项目。 
- 在“解决方案资源管理器”中,右击您的项目,然后单击“属性”。将显示“项目设计器”。 
- 单击“编译”选项卡。 
- 选中“为 COM 互操作注册”复选框。 
在您的类中设置代码以创建 COM 对象
- 在“解决方案资源管理器”中,双击“Class1.vb”,以显示其代码。 
- 将该类重命名为 ComClass1。 
- 将下列常数添加到 ComClass1。它们将存储 COM 对象必须有的全局唯一标识符 (GUID) 常数。 - Public 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}",则代码应如下所示。 - Public Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"
- 为 InterfaceId 和 EventsId 常数重复上面的步骤,如下例所示。 - Public Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91" Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31".gif) 说明: 说明:- 请确定 GUID 是新的和唯一的,否则您的 COM 组件可能与其他 COM 组件冲突。 
- 将 ComClass 属性添加到 ComClass1,为类 ID、接口 ID 和事件 ID 指定 GUID,如下面的示例所示: - <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _ Public Class ComClass1
- COM 类必须具有一个无参数的 Public Sub New() 构造函数,否则该类无法正确注册。向该类中添加一个无参数构造函数: - Public Sub New() MyBase.New() End Sub
- 将属性、方法和事件添加到该类,并以 End Class 语句结束它。从“生成”菜单中选择“生成解决方案”。Visual Basic 将生成程序集,并向操作系统注册此 COM 对象。 .gif) 说明: 说明:- 其他 Visual Basic 应用程序不能使用您用 Visual Basic 生成的 COM 对象,因为它们不是真正的 COM 对象。试图将引用添加到此类 COM 对象会引发错误。有关详细信息,请参见 .NET Framework 应用程序中的 COM 互操作性。