gpt4 book ai didi

c# - 将二维数组从 VB6 编码到 .NET

转载 作者:行者123 更新时间:2023-11-30 22:14:55 24 4
gpt4 key购买 nike

我有一个 VB6 程序集,我需要在我的 .NET 应用程序中使用它,并通过 tlbimp.exe 生成用于 .NET 的 Interop DLL。

VB6 程序集有一个带有 byref 数组参数的函数。我不想更改 VB6 程序集中的任何内容,因此我希望有一个解决方案可以使以下工作正常进行。

它正在填充数组,我想在我的 .NET 代码(c# 或 vb.net)中使用它。

VB6 函数示例(文件 NativeClass.cls):

Public Function GetData(ByRef data() As String) As Integer
Dim tResults() As String
Dim sRecordCount As String
Dim lCount As Long

' load data
sRecordCount = dataDummyObject.RecordCount

ReDim tResults(sRecordCount, 2)

' fill the array in a loop
For lCount = 0 To sRecordCount - 1
tResults(lCount, 0) = dataDummyObject.Fields("property1")
tResults(lCount, 1) = dataDummyObject.Fields("property2")

If (sRecordCount - 1 - lCount) > 0 Then
Call dataDummyObject.MoveNext
End If
End For

data = tResults
GetData = sRecordCount
End Function

现在我想在 VB.NET 中使用它:

Private _nativeAssembly As New NativeClass()

Public Function GetDataFromNativeAssembly() As String()
Dim loadedData As String() = Nothing

_nativeAssembly.GetData(loadedData)

Return loadedData
End Function

C#版本:

private NativeClass _nativeAssembly = null;

public string[] GetDataFromNativeAssembly()
{
string[] loadedData = null;

_nativeAssembly.GetData(loadedData);

return loadedData;
}

但是在执行代码时出现以下异常:

System.Runtime.InteropServices.SafeArrayRankMismatchException:等级 2 的 SafeArray 已传递给需要等级 1 数组的方法。

我真的需要帮助来解决这个问题!感谢您的任何建议!

最佳答案

我认为不修改 VB6 代码就无法解决这个问题。尝试将函数声明为

Public Function GetData(ByRef data As Variant) As Integer

Public Function GetData(ByRef data As Object) As Integer

字符串数组的 ReDim 应该可以在 Variant 中正常工作。我记得我一直都是这样做的,因为 VB6 不允许将二维数组作为参数。

从 .NET 检查它时,您应该看到类型。我的机器上没有 VB6 IDE 来验证这一点。

如果一个有效,您应该能够转换为您期望的 String(,)

关于c# - 将二维数组从 VB6 编码到 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com