VB6 和 COM:不能在 COM 函数中使用用户定义的类型参数
我在 VB6 中使用 COM 对象。 COM 对象有一个函数 Foo(Long, Long, 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 函数可以正常工作。
我该如何解决这个问题?
谢谢。
I am using a COM object in VB6. The COM object has a function Foo(Long, Long, Rect). Rect is a struct defined in the COM object implementation. My VB6 code (a button on a form) is like below:
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
At the last line it is giving me this compilation error:
"Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions".
Other COM functions that do not have user-defined type parameters are working fine.
How do I solve this problem?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该函数调用是后期绑定,因为您的变量
ComObj
未输入。您可以尝试声明它,例如EDIT
我还会检查您实际上是否正在使用 COM 库中的
DISPLAY_RECT
。打开对象浏览器(按 F2)并在所有库中搜索DISPLAY_RECT
。DISPLAY_RECT
DISPLAY_RECT
Dim rect As TheCorrectLibraryName.DISPLAY_RECT
The function call is late-bound because your variable
ComObj
is not typed. You could try declaring it, something likeEDIT
I would also check that you are actually using the
DISPLAY_RECT
from the COM library. Open up the object browser (press F2) and search all libraries forDISPLAY_RECT
.DISPLAY_RECT
DISPLAY_RECT
with the name of the libraryDim rect As TheCorrectLibraryName.DISPLAY_RECT
假设 DISPLY_RECT 是一种类型,则无法将类型传递到公共 COM 方法或从 VB6 中的公共 COM 函数返回类型。您必须创建一个复制该类型的类,以及一个将该类作为参数并返回该类型的辅助函数。
Assuming DISPLY_RECT is a type, you can't pass types into a public COM method or return a type from a public COM Function in VB6. You will have to make a class duplicating the type, and a helper function that takes the class as a parameter and returns the type.