繁体   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