【发布时间】:2012-05-16 09:23:05
【问题描述】:
我想要一个 Interop 用户控件 (VB.NET) 从 get/set 调用返回并接受多个值。我假设用户定义类型 (UDT) 是正确的方法,但我不断从 VB6 编译中得到“变量使用 Visual Basic 不支持的自动化类型”。如何在互操作控件和 VB6 应用程序之间传递多个值?
VB.NET (Interop) 代码,带有 .NET ListView 的控件
Structure Employee
Dim Firstname As String
Dim Lastname As String
End Structure
…
Public Property MyReadListViewData() As Employee
Get
Dim myEmployee As Employee
myEmployee.Lastname = ListView1.SelectedItems(0).Text
Return myEmployee
End Get
Set(ByVal value As Employee)
Me.ListView1.SelectedItems(0).Text = value.Lastname
End Set
End Property
典型的 VB6 代码:
Private Sub Command4_Click()
Dim myEmployee As Employee
myEmployee = MyToolStrip1.MyReadListViewData
Text3.Text = myEmployee.Lastname
End Sub
【问题讨论】:
-
您可能需要将属性应用到结构定义以使其可用。或者,您是否尝试过使用类而不是结构?
-
结构是 COM 中的一个问题,它们具有非常依赖于编译器/硬件的布局。 IRecordInfo 接口几乎不支持它们,通常需要在类型库中声明结构。值得注意的是,当被要求处理公共 UDT 时,VB6 构建系统非常糟糕。只需将 Employee 声明为 [ComVisible] 接口 + 类即可避免此类麻烦。
-
你能提供一些代码来演示这个吗?
标签: vb.net vb6 com-interop