我有一些VB6代码,很难进行修改,它看起来像这样:
Dim cCount as Long
Dim rCount as Long
Dim result()
Set mx = CreateObject("Component.Class")
Dim rtn = mx.GetList(rCount,cCount,result)
它所调用的方法目前是一个VB6组件,我们已经将其迁移到.NET,但存在一个问题。我们不确定结果()正在寻找哪种类型,因为它是一种变体类型。我们尝试过对象、对象数组、对象二维数组、字符串、字符串数组等等,但都没有成功。
以下是一个示例:
public bool GetList(ref long rCount, ref long cCount, ref object result)
{
...
}
我甚至尝试将第三个参数设置为VariantWrapper,因为它会根据需要添加ByRef:
public bool GetList(ref long rCount, ref long cCount, VariantWrapper result)
{
...
}
有什么办法可以设置传入结果,以便我不会出现未处理的异常吗?
我创建了一个测试接口(用于COM)、测试类和测试VB6应用程序,以确保这是Variant的问题。因此,它的定义如下:
.NET接口:
[DispId(1)]
[ComVisible(true)]
string Test(ref object[] value);
VB 6 方法:
Private Sub Command1_Click()
Set mx = CreateObject("Component.Class")
Dim result()
MsgBox mx.Test(result)
End Sub
与上述描述的问题相同。在 VB6 中,它只是将我弹出。如果我编译并运行它,我会得到一个通用的 .NET 异常,并将我弹出。
result()
是如何声明和传递的,但在GetList
返回后它是如何使用的呢? - Jay