我有一个第三方软件,它是一个进程外的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#的不同之处?
答案 0 :(得分:3)
我会试试这个:
pProvider.GiveMeGlobalDb(ref pWV);
答案 1 :(得分:0)
也许尝试一下" out" C#上的关键字?