Marschall C++ int-array in C#
Möchte ich Marschall ein array von ints von C++ zu C#. Ich habe eine unmanaged C++ dll, welche enthält:
DLL_EXPORT int* fnwrapper_intarr()
{
int* test = new int[3];
test[0] = 1;
test[1] = 2;
test[2] = 3;
return test;
}
mit Deklaration in header - extern "C" DLL_EXPORT int* fnwrapper_intarr();
Ich bin dann mit pinvoke Marschall es in C#:
[DllImport("wrapper_demo_d.dll")]
[return: MarshalAs(UnmanagedType.SafeArray)]
public static extern int[] fnwrapper_intarr();
Und ich nutze die Funktion so auf:
int[] test = fnwrapper_intarr();
Jedoch während der Ausführung des Programms bekomme ich folgende Fehlermeldung: SafeArray cannot be marshaled to this array type because it has either nonzero lower bounds or more than one dimension.
Was array-Typ sollte ich verwenden? Oder gibt es eine bettery Art von marshalling-arrays oder Vektoren von ganzen zahlen?
- Wenn Sie der Autor fnwrapper_intarr, gibt es etwas gegen Rückgabe eines safearray (oder besser: als parameter)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie auch schreiben-Release-Funktion, die in nicht verwalteten Dll, die löscht Zeiger erstellt von fnwrapper_intarr. Diese Funktion muss akzeptieren, IntPtr als parameter.
Marshal.Copy
nichtMarshal::Copy
.