我有一个 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 数组的方法。
我真的需要帮助来解决这个问题!感谢您的任何建议!