我有一个用 C# 编写的程序,它与专有的 COM 接口交互。不幸的是,这个接口有一些不能在 C# 中正常工作的特性。但是,该界面在 Visual Basic 中运行良好。
我已经在 C# 中使用 C# 的部分接口上用 C# 编写了很多代码,所以如果可以避免的话,我真的不想在 VB 中全部重写。我想找到一种简单的方法来使用 Visual Basic 来实现我确实需要的功能,而无需重新编写我已经拥有的所有代码。所以,问题是,这样做的最佳方法是什么?
我的第一次尝试:
我希望我可以将我在 C# 中创建的 COM 对象传递给 Visual Basic,它会起作用。像这样:
C#:
Type type = Type.GetTypeFromProgID("ACM Application");
acm = System.Activator.CreateInstance(type);
ACMAccess.ACMAccess acmAccess =new ACMAccess.ACMAccess(acm);
VB:
Sub New(ByVal acm)
Dim starVars = acm.Simulation.Flowsheet.FindMatchingVariables("~")
For Each Var In starVars
Console.WriteLine(Var.Name)
Next
End Sub
可悲的是,这不起作用。失败有点有趣,在调试器中它有正确的类型,但如果我调用一个方法,它什么也做不了。如果我尝试一个不存在的方法名称,我会得到一个异常,但是一个现有的方法,什么都不会发生。
第二个想法:
我能想到的替代方案是委托模式,我已经避免了一段时间。创建一个 VB 对象,该对象实际创建并执行与 COM 接口的所有交互。C# 程序的其余部分将仅通过 VB 包装器使用 COM 接口。(而不是像第一次尝试那样来回传递它。)