.NET アプリケーションで使用する必要がある VB6 アセンブリがあり、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 の配列を期待するメソッドに渡されました。
この問題を解決するには本当に助けが必要です! アドバイスをありがとう!