0

我在 VB6 中使用 COM 对象。COM 对象有一个函数 Foo(Long, Long, Rect)。Rect 是在 COM 对象实现中定义的结构。我的 VB6 代码(表单上的一个按钮)如下所示:

Private Sub btnTestCom_Click()
    Set ComObj = CreateObject("ObjectName")
    Dim rect As DISPLAY_RECT

    rect.Left = 20
    rect.Top = 20

    ComObj.Foo(101, 0, rect) ' Error here
End Sub

在最后一行,它给了我这个编译错误:“只有在公共对象模块中定义的用户定义类型才能被强制转换为变体或从变体强制转换或传递给后期绑定函数”。

其他没有用户定义类型参数的 COM 函数可以正常工作。

我该如何解决这个问题?

谢谢。

4

2 回答 2

1

函数调用是后期绑定的,因为您的变量ComObj没有输入。您可以尝试声明它,例如

Dim ComObj As SomeObjectDefinedInComImplementation 

编辑

我还将检查您是否实际使用DISPLAY_RECT了 COM 库中的。打开对象浏览器(按 F2)并在所有库中搜索DISPLAY_RECT.

  • 如果您只看到一个结果,请检查它是否来自正确的 COM 库。
    • 如果它来自正确的 COM 库,则肯定还有另一个问题。
    • 如果它来自错误的 COM 库:检查您是否确实引用了正确的库(在项目引用中)。如果您确实已经引用了它,请仔细检查您是否真的应该通过DISPLAY_RECT
  • 如果您看到多个结果,则 VB6 可能选择了错误的库。尝试DISPLAY_RECT使用库的名称明确限定Dim rect As TheCorrectLibraryName.DISPLAY_RECT
于 2011-08-15T08:14:32.933 回答
0

假设 DISPLY_RECT 是一种类型,您不能将类型传递给公共 COM 方法或从 VB6 中的公共 COM 函数返回类型。您将必须创建一个复制类型的类,以及一个将类作为参数并返回类型的辅助函数。

于 2011-08-15T13:10:56.697 回答