通过 COM 互操作将集合公开给 VB6 应用程序
Exposing a Collection to a VB6 app through COM Interop
我正在尝试将以下函数添加到我的 COM Class 库中,但它无法编译。我相信您不能将集合公开给 COM。我想通过在我的 VS2013 机器和 VB6 机器上使用 RegAsm 并将 Microsoft.VisualBasic.dll 注册为 tlb 它会起作用,但它不起作用。
如果不是,那么将某种对象列表传递给 VB6 应用程序的最佳方式是什么。
Public Function GetCustomerCollection() As Collection
Dim collection As New Collection
Dim c1 As New customer
c1.Name = "Test Customer1"
c1.Phone = "(888) 777-9443"
c1.Balance = 22.58
Dim c2 As New customer
c2 .Name = "Test Customer2"
c2 .Phone = "(888) 433-4423"
c2 .Balance = 99.99
collection.Add(c1)
collection.Add(c2)
Return collection
End Function
更新
在 VB6 中,我正在尝试检索列表:
Private Sub Form_Load()
Dim demo As New testLibrary.Demo
Dim customerList As Collection
Set customerList = demo.GetCustomerCollection
Label1.Caption = customerList(1)
End Sub
不,Microsoft.VisualBasic.Collection class 不是 <ComVisible(True)>
。 System.Collections 中的任何 .NET 1.x 接口和集合 classes 都很好。
COM 方式仅公开接口,因此如果 VB6 代码不应该修改集合,则使用 IEnumerable,如果需要,则使用 IList。所以你想这样写:
Public Function GetCustomerCollection() As System.Collections.IEnumerable
Dim collection As New List(Of customer)
collection.Add(New customer With {.Name = "Test Customer1", .Phone = "(888) 777-9443", .Balance = 22.58})
collection.Add(New customer With {.Name = "Test Customer2", .Phone = "(888) 433-4423", .Balance = 99.99})
Return collection
End Function
如果需要修改,则替换 IList。
我正在尝试将以下函数添加到我的 COM Class 库中,但它无法编译。我相信您不能将集合公开给 COM。我想通过在我的 VS2013 机器和 VB6 机器上使用 RegAsm 并将 Microsoft.VisualBasic.dll 注册为 tlb 它会起作用,但它不起作用。
如果不是,那么将某种对象列表传递给 VB6 应用程序的最佳方式是什么。
Public Function GetCustomerCollection() As Collection
Dim collection As New Collection
Dim c1 As New customer
c1.Name = "Test Customer1"
c1.Phone = "(888) 777-9443"
c1.Balance = 22.58
Dim c2 As New customer
c2 .Name = "Test Customer2"
c2 .Phone = "(888) 433-4423"
c2 .Balance = 99.99
collection.Add(c1)
collection.Add(c2)
Return collection
End Function
更新
在 VB6 中,我正在尝试检索列表:
Private Sub Form_Load()
Dim demo As New testLibrary.Demo
Dim customerList As Collection
Set customerList = demo.GetCustomerCollection
Label1.Caption = customerList(1)
End Sub
不,Microsoft.VisualBasic.Collection class 不是 <ComVisible(True)>
。 System.Collections 中的任何 .NET 1.x 接口和集合 classes 都很好。
COM 方式仅公开接口,因此如果 VB6 代码不应该修改集合,则使用 IEnumerable,如果需要,则使用 IList。所以你想这样写:
Public Function GetCustomerCollection() As System.Collections.IEnumerable
Dim collection As New List(Of customer)
collection.Add(New customer With {.Name = "Test Customer1", .Phone = "(888) 777-9443", .Balance = 22.58})
collection.Add(New customer With {.Name = "Test Customer2", .Phone = "(888) 433-4423", .Balance = 99.99})
Return collection
End Function
如果需要修改,则替换 IList。