演练:使用 Visual Basic 创建 COM 对象
创建新的应用程序或组件时,最好创建 .NET Framework 程序集。 但使用 Visual Basic 也易于将 .NET Framework 组件向 COM 公开。 这使您可以为需要 COM 组件的早期应用程序套件提供新组件。 本演练演示如何使用 Visual Basic 将 .NET Framework 对象作为 COM 对象公开,包括使用和不使用 COM 类模板。
公开 COM 对象的最简单的途径是使用 COM 类模板。 COM 类模板创建一个新类,然后配置您的项目以生成作为 COM 对象的类和操作性层并在操作系统注册。
提示
虽然还可以将用 Visual Basic 创建的类公开为 COM 对象以供非托管代码使用,但它并不是真正的 COM 对象,不能由 Visual Basic 使用。 有关更多信息,请参见 .NET Framework 应用程序中的 COM 互操作性 (Visual Basic)。
提示
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 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”。 在“创建 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"
提示
请确定 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 对象。
提示
其他 Visual Basic 应用程序不能使用您用 Visual Basic 生成的 COM 对象,因为它们不是真正的 COM 对象。 尝试将引用添加到此类 COM 对象会引发错误。 有关详细信息,请参见 .NET Framework 应用程序中的 COM 互操作性 (Visual Basic)。
请参见
任务
演练:用 COM 对象实现继承 (Visual Basic)