在VB.NET和C#中调用COM接口方法

时间:2014-05-14 15:05:39

标签: c# vb.net com vb6 activex

我有一个第三方软件,它是一个进程外的ActiveX服务器。我猜这个应用程序是在VB6中开发的,文档使用VB作为示例客户端。

在与C#斗争以使其工作之后,我想我会在VB.NET中尝试它,令我惊讶的是,VB.NET中的相同代码看起来是有效的,而在C#中却没有。

有问题的方法有签名

short oleProvider.GiveMeGlobalDB(ref iGenericDB ptr)

其余的接口类型在ActiveX组件中定义。

VB.NET(这很有效!)

' defined in a module '
Public pWV As iGenericDB        ' Interface iGenericDB  '
Public pProvider As oleProvider ' Interface oleProvider '

' in a class '
Public Class clsWatView
    Public Sub StartUp()
        pProvider = New oleProvider  ' returns a COM object '            
        pProvider.GiveMeGlobalDb(pWV)        
        ' pWV gets interface pointer to COM object '
    End Sub    
End Class

C#

public static class clsWatView
{
    public static iGenericDB pWV;          // interface iGenericDB
    public static oleProvider pProvider;   // interface oleProvider

    static void StartUp()
    {
        pProvider = new oleProvider();  // This returns a COM object (OK)
        pProvider.GiveMeGlobalDb(pWV);  // executes, but pWV remains null
    }
}

我的问题是 - 这两段代码有什么不同? VB.NET最终以pWV指向有效的COM对象,C#以null结束。什么是VB.NET与C#的不同之处?

2 个答案:

答案 0 :(得分:3)

我会试试这个:

pProvider.GiveMeGlobalDb(ref pWV);

答案 1 :(得分:0)

也许尝试一下" out" C#上的关键字?