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

创建新应用程序或组件时,最好创建 .NET Framework 程序集。 但是,Visual Basic 还可以轻松地向 COM 公开 .NET Framework 组件。 这样,便可以为需要 COM 组件的早期应用程序套件提供新组件。 本演练演示如何使用 Visual Basic 将 .NET Framework 对象公开为 COM 对象,无论使用还是不使用 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 互作性

另请参阅