2011-06-03 69 views
1

我有一個需要從VB6 dll調用例程的.NET程序集。 .NET程序集的例程,用於其他.NET代碼將返回對象列表。但是這對VB6不起作用。所以我使用Interop來創建一個「vb6類」,它將返回所需的數據。我讀過VB.NET集合與VB6集合兼容,但我發現這是不真實的。我簡單的測試包括:在VB6中訪問.NET集合

.NET代碼:

<ClassInterface(ClassInterfaceType.AutoDual)> _ 
Public Class MyCOMClass 

    Public Function TestMe() As Microsoft.VisualBasic.Collection 
     Dim ret As New Microsoft.VisualBasic.Collection 

     Dim inParam As String = "Stuff " 
     ret.Add(inParam) 
     ret.Add(inParam & "2") 
     ret.Add(inParam & "3") 
     ret.Add(inParam & "4") 

     Return ret 
    End Function 


End Class 

VB6:

Dim a As MyDotNet.MyCOMClass 

Set a = New MyDotNet.MyCOMClass 

Dim c As Collection 

Set c = a.TestMe() 

在這條線,我收到一個 「類型不匹配,錯誤13」 錯誤。

我有點茫然。我基本上需要從.NET代碼返回一個列表或數組項目 - 我已經必須將現有的.NET類對象打包成一個字符串或返回到VB6(然後將其解壓縮) ,所以我試圖讓自己稍微容易些。

任何建議或提示將不勝感激!

謝謝。

回答

4

Microsoft.VisualBasic.Collection兼容成員方式,但它不是相同的類型。爲什麼不只是返回數組?字符串或你的COM可見的.NET類?
或者創建一個索引屬性?


說完這句話,爲什麼不首先回IListIList是COM可見的。
這工作:

<Microsoft.VisualBasic.ComClass()> _ 
Public Class Class1 

    Public Function Test() As IList 
     Dim l() As String = New String() {"abc", "def", "42"} 
     Return l 
    End Function 

End Class 

 

Private Sub Command1_Click() 
    Dim c As New ClassLibrary1.Class1 

    MsgBox c.Test(2) 
End Sub 
+0

標記此一個的答案,如這幾乎是我所做的。暴露一些簡單的對象,並使用數組來傳遞信息。 – 2011-06-20 13:27:25

0

您可以返回對象的數組其更多的光線與「Microsoft.VisualBasic.Collection」我從來沒有很好地工作到底是你有一個從類型轉換相同鍵入,如何,

Dim a As MyDotNet.MyCOMClass 
dim ptr as variant 
Set a = New MyDotNet.MyCOMClass 
Dim c As Collection 
ptr = a.TestMe() 
Set c = ptr 

如果不工作返回對象數組。還記得你能夠在項目設置

應用程序 - >裝配信息 - >進行組裝COM可見(真) 和 編譯 - >註冊爲COM Interop(真)

+0

我永遠無法讓VB6 Collection類與.NET Collection類「玩得很好」 - 一直告訴我它們不兼容。 – 2011-06-20 13:28:16