簡體   English   中英

如何將自定義集合類從VB.NET傳遞到VB6?

[英]How can you pass a custom collection class from VB.NET to VB6?

我最近嘗試將舊版VB6應用程序移植到.NET。 但是,這不是一個完整的端口,因為我只專注於應用程序層。 我仍將使用一些VB6 COM組件。

到目前為止一切順利,但最近我碰壁了。

我需要將自定義集合從.NET傳遞到VB6。 這可能嗎?

我在.NET端調用的COM方法期望使用通用對象,但是應用程序立即崩潰:InvalidCastException-指定的強制轉換無效。

我偶然發現了幾篇文章,這些文章暗示了如何將VB6集合傳遞給.NET,但沒有反過來。 我嘗試從.NET中繼承/利用幾種不同的集合類型,但到目前為止都無濟於事。 任何幫助表示贊賞。

在由.NET集合類實現的COM接口聲明中,將返回枚舉數的方法的DispId設置為-4。 將該方法稱為“ GetEnumerator”。

另一方面,如果您實際上是要模擬VBA.Collection對象,而不僅僅是在VB6中支持For Each,則可以在VB.NET類庫中設置對VBA類型庫的引用(假設您在創建一個類庫)並在您的VB.NET類中實現_Collection。

<Guid("A4C4671C-499F-101B-BB78-00AA00383CBB")>
<ComDefaultInterface(GetType(_Collection))>
<ComVisible(False)>
Public Class VBACollection
   Implements _Collection
   .
   .
   .
End Class

然后只需實現_Collection接口。 如果VB.NET不喜歡接口名稱中的下划線,則可能需要對其進行轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM