Hallo,
ich habe ein kleines Problem und zwar möchte ich einen ulong array in C# zu einer Delphi DLL übergeben, diese dort mit Werten füllen und wieder zurück zum C# Hauptprogramm geben.
Das ganze funktioniert problemlos für nicht-arrays, hier ein Beispiel was funktioniert:
Delphi-Quelltext
1: 2: 3: 4:
| procedure Test(out i: ptruint;) stdcall; begin out := InternalTest(); end; |
und in C#:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| [DllImport("test.dll")] public static extern void Test(ref ulong i);
ulong i = 0; Test(i); MessageBox.Show(i.ToString()); |
Das funktioniert einwandfrei.
Aber wenn ich das ganze mit einem Array probiere bekomme ich eine externe Exception:
Delphi-Quelltext
1: 2: 3: 4:
| procedure Test(out i: array of ptrUint;) stdcall; begin out[0] := InternalTest(); end; |
und in C#:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| [DllImport("test.dll")] public static extern void Test(ref ulong[] i);
ulong[] i = new ulong[3]; Test(i); MessageBox.Show(i[0].ToString()); |
Ich habe folgende Varianten auch schon ausprobiert aber das klappt einfach nicht:
C#-Quelltext
1: 2: 3: 4: 5:
| [DllImport("test.dll")] public static extern void Test(ref [MarshalAs(UnmanagedType.LPArray] [In, Out]ulong[] i);
[DllImport("test.dll")] public static extern void Test(ref [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2] [In, Out] ulong[] i); |
Bitte helft mir