1

我有一个用 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 接口。(而不是像第一次尝试那样来回传递它。)

4

0 回答 0