2

我似乎无法让我的 COM 类库(基于 .NET)支持早期绑定。

我正在 VB.NET 2003 中创建一个类库,用于 Office 2003 VBA(以及更高版本的 Office 2010)。文档@ StackOverflow 和其他地方给我带来了这段代码:

    Imports System.Runtime.InteropServices

    <InterfaceType(ComInterfaceType.InterfaceIsDual), _
    ComVisible(True), _
    Guid("<some valid GUID>")> _
    Public Interface _TestCOMClass
        Function Test() As String
    End Interface

    <ClassInterface(ClassInterfaceType.None), _
    ComVisible(True), _
    Guid("<another valid GUID>"), _
    ProgId("TestCOMDLL.TestCOMClass")> _
    Public Class TestCOMClass
        Implements _TestCOMClass
        Public Function Test() As String Implements _TestCOMClass.Test
            Return "Test value"
       End Function
    End Class

该解决方案设置为使用 COM 互操作进行编译。它成功构建,然后 ProgID 出现在 VBA 的引用列表中。

我通过设置适当的引用然后声明适当类型的变量并实例化我的类来在 VBA 中使用它。这就是它变得神秘的地方。

    Dim EarlyBird As TestCOMDLL.TestCOMClass
    Dim LateBird  As Object

    Set EarlyBird = New TestCOMDLL.TestCOMClass
    ' This is my preferred instantiation method, but results in a 
    ' "Does not support Automation or expected interface" error

    Set EarlyBird = CreateObject("TestCOMDLL.TestCOMClass")
    ' This is my 2nd best instantiation method, 
    ' but results in a Type Mismatch error

    Set LateBird = CreateObject("TestCOMDLL.TestCOMClass")
    MsgBox LateBird.Test
    ' This works, but has all the disadvantages of late binding

所以我可以引用我的库,声明适当类型的对象变量,并实例化我的类,但我不能将实例化的对象引用分配给我的类型化变量,只能分配给 Object 类型的变量。此外,似乎支持实例化 New 关键字(Intellisense 提供库和类作为选项),但在运行时失败。

我的 VB.NET 代码或构建设置中缺少什么使早期绑定无法正常工作?

PS:提出我的问题的另一种方式是,我在这个 StackOverflow 线程中尝试了解决方案,发现 AnthonyWJones 所说的

您还可以引用 dll 并使用早期绑定:

在我的情况下不是真的...... :-(

4

0 回答 0