DMF*_*MFW 5 c# vb6 com com-interop vb6-migration
我希望能够编写一个可以在 C# 和 VB6 类中实现的类接口,以便可以在 VB6 代码中以相同的方式处理这些类,但我无法完成这项工作。
在VB6中,我想使用Implements关键字来实现类VB6Class来实现一些接口ISharedInterface。
在 C# 中,我想要一些其他类 C#Class,我可以将它们公开给 COM,同时实现 ISharedInterface。
目标是 VB6 代码将能够通过 ISharedInterface 对 VB6Class 和 C#Class 进行操作,而无需关心这些类是用哪种语言构建的。
我想使用这种技术作为一种从 VB6 迁移的方法,通过在 VB6 端连续重写所有内容,如果我可以在 C# 中实现我在 VB6 中已有的接口,这将是理想的。但是失败了,即使我必须用 C# 重写一个接口以共享回 VB6,这仍然很有用(即,我什至不关心接口是用 C# 编写并暴露给 COM 还是用 COM 编写并由C#,只要语言不通的双方都能引用同一个接口即可)。
我发现这出奇地难。我可以在 C# 中引用来自 COM 的接口,但我无法将其作为 COM 可见接口导出回 COM。作为替代方案,如果我尝试在 C# 本身中创建一个接口,我还没有找到直接通过 COM 查看它的方法,我尝试间接使用它的各种解决方法,例如创建一个存根类来实现接口并公开当我尝试实现公开的存根类(即使它们编译)时,作为 COM 可见的只是在 VB6 中引发运行时错误。
我目前对此没有好的解决方案,只有一个非常笨拙的工作,即在 C# 和 VB6 中实现单独的接口,将 C# 方法直接公开给 COM 并在 VB6 中创建一个包装类,该类简单地将接口方法重定向到底层 true方法。
创建两种语言都可以引用的单个接口(在 VB6 或 C# 中)的最佳方法是什么,而我不必复制接口定义?
创建两种语言都可以引用而无需重复接口定义的单个接口(使用 VB6 或 C#)的最佳方法是什么?
用 IDL 编写接口并编译成类型库,该类型库在 VB 中引用并导入 ( tlbimp) 到 .NET 中。(如果使用 VB6 定义接口,则需要避免重新生成 IID。)
您可以在 .NET 中定义接口,但这会涉及更多步骤。