我有一个我在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
可悲的是,这不起作用。失败是有趣的,在调试器中它有正确的类型,但如果我调用一个方法,它什么都不做。如果我尝试一个不存在的方法名称,我得到一个例外,但是现有的方法,没有任何反应。
第二个想法:
我能想到的替代方案,即我一直在避免的,是委托模式。创建一个实际创建并执行与COM接口的所有交互的VB对象。 C#程序的其余部分只能通过VB包装器使用COM接口。 (而不是像第一次尝试那样来回传递它。)