如何在 VB6 和 C# 之间共享接口?

2024-02-01

我希望能够编写一个可以在 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 中定义接口,但这会涉及更多步骤。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 VB6 和 C# 之间共享接口? 的相关文章

随机推荐