是否可以替换早期绑定模块

时间:2011-05-12 10:08:53

标签: c# .net com vb6 interop

如果接口/ GUIDs / etc是相同的,用其他语言编写的新代码?

我正在努力做到这一点,详见堂兄帖子:

Legacy VB6 app replacement

但我想我会切入追逐。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用C#4.0的dynamic解决许多与COM通信时遇到的问题。

引入了

dynamic个对象和可选参数来缓解这些痛苦。

答案 1 :(得分:1)

动态在这种情况下无济于事,因为你在谈论一个VB6应用程序引用一个COM组件,该组件在VB6(或其它)中是WAS,但你现在想要成为VB.net(或C#)。 / p>

尽管如此,你应该可以做到这一点。

您需要使用OLEView(或类似的东西)为您要替换的COM DLL生成MIDL。这将为您提供该DLL中定义的所有类和接口的特定GUIDS。

然后你需要编写DLL的.net版本,为每个类和接口指定EVERY SINGLE GUID。

您需要查看.net属性的文档:

标记有ComVisible特性 GUID InterfaceType

可能还有一些。这些attrs允许您专门标记GUID用于您的dll中的对象和接口。

基本上,你正在努力的是当你为两个DLL(旧的和新的)生成Typelib时,你应该得到相同的tlbs。如果不这样做,新的将不会与旧版本兼容。