演练:使用 Visual Basic 创建 COM 对象

创建新应用程序或组件时,最好创建 .NET Framework 程序集。 不过,也可以借助 Visual Basic 轻松地将 .NET Framework 组件公开给 COM。 这使你能够为需要 COM 组件的早期应用程序套件提供新组件。 本演练演示如何借助 Visual Basic 在使用和不使用 COM 类模板的情况下将 .NET Framework 对象公开为 COM 对象。

公开 COM 对象的最简单方法是使用 COM 类模板。 此模板创建一个新类,将项目配置为生成具有互操作性层的类作为 COM 对象,并将其注册到操作系统。

注意

尽管你也可以将在 Visual Basic 中创建的类公开为 COM 对象,以供非托管代码使用,但它不是真正的 COM 对象,不能由 Visual Basic 使用。 有关详细信息,请参阅 .NET Framework 应用程序中的 COM 互操作性

注意

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE

使用 COM 类模板创建 COM 对象

  1. 通过从“文件”菜单单击“新建项目”,打开一个新的 Windows 应用程序项目。

  2. 在“项目类型”字段下的“新建项目”对话框中,检查是否选择了 Windows。 从“模板”列表中选择“类库”,然后单击“确定”。 将显示新项目。

  3. 从“项目”菜单中选择“添加新项”。 随即出现“添加新项”对话框。

  4. 从“模板”列表中选择“COM 类”,然后单击“添加”。 Visual Basic 会添加一个新类并为新项目配置 COM 互操作。

  5. 向 COM 类添加属性、方法和事件等代码。

  6. 从“生成”菜单中选择“生成 ClassLibrary1”。 Visual Basic 会生成程序集并将 COM 对象注册到操作系统。

在没有 COM 类模板的情况下创建 COM 对象

你也可以手动创建 COM 类,而不是使用 COM 类模板。 当你在命令行中工作或者需要更好地控制 COM 对象的定义方式时,此过程很有用。

设置项目以生成 COM 对象

  1. 通过从“文件”菜单单击“新建项目”,打开一个新的 Windows 应用程序项目。

  2. 在“项目类型”字段下的“新建项目”对话框中,检查是否选择了 Windows。 从“模板”列表中选择“类库”,然后单击“确定”。 将显示新项目。

  3. 在“解决方案资源管理器”中,右键单击项目,然后单击“属性” 。 随即显示“项目设计器”。

  4. 单击“编译” 选项卡。

  5. 选中“为 COM 互操作注册”复选框。

在类中设置代码以创建 COM 对象

  1. 在解决方案资源管理器中,双击“Class1.vb”以显示其代码。

  2. 将类重命名为 ComClass1

  3. 将以下约束添加到 ComClass1。 它们将存储 COM 对象必须具有的全局唯一标识符 (GUID) 常量。

    Public Const ClassId As String = ""
    Public Const InterfaceId As String = ""
    Public Const EventsId As String = ""
    
  4. 在“工具”菜单上,单击“创建 Guid”。 在“创建 GUID”对话框中,单击“注册表格式”,然后单击“复制”。 单击“退出” 。

  5. ClassId 的空字符串替换为 GUID,并删除前导和尾随大括号。 例如,如果 Guidgen 提供的 GUID 为 "{2C8B0AEE-02C9-486e-B809-C780A11530FE}",则代码应如下所示。

    Public Const ClassId As String = "2C8B0AEE-02C9-486e-B809-C780A11530FE"
    
  6. InterfaceIdEventsId 常量重复上述步骤,如以下示例所示。

    Public Const InterfaceId As String = "3D8B5BA4-FB8C-5ff8-8468-11BF6BD5CF91"
    Public Const EventsId As String = "2B691787-6ED7-401e-90A4-B3B9C0360E31"
    

    注意

    确保 GUID 是新的和唯一的;否则,COM 组件可能会与其他 COM 组件发生冲突。

  7. ComClass 属性添加到 ComClass1,并为类 ID、接口 ID 和事件 ID 指定 GUID,如以下示例所示:

    <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)>
    Public Class ComClass1
    
  8. COM 类必须具有无参数的 Public Sub New() 构造函数,否则该类将无法正确注册。 向类添加无参数构造函数:

    Public Sub New()
        MyBase.New()
    End Sub
    
  9. 向类添加属性、方法和事件,并以 End Class 语句结束。 从“生成”菜单中选择“生成解决方案”。 Visual Basic 会生成程序集并将 COM 对象注册到操作系统。

    注意

    使用 Visual Basic 生成的 COM 对象无法由其他 Visual Basic 应用程序使用,因为它们不是真正的 COM 对象。 尝试添加对此类 COM 对象的引用将引发错误。 有关详细信息,请参阅 .NET Framework 应用程序中的 COM 互操作性

另请参阅