将COM对象从C#传递给Visual Basic

时间:2013-01-07 00:09:20

标签: c# vb.net com

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

0 个答案:

没有答案