Ich habe folgende Struktur in C++:Marshal C++ struct Array in C#
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
Und eine Funktion, die ich p bin/in Berufung auf eine Reihe von drei dieser Strukturen zu erhalten:
void GetData(LPRData *data);
in C++ ich tun würde, nur etwa so:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData(Results);
Und es würde gut funktionieren, aber in C# scheine ich kann es nicht zur Arbeit zu kommen. Ich habe eine C# struct wie folgt erstellt:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
Und wenn ich ein Array von 3 derer initialisiert werden (und alle ihre Unterarrays) und in diese übergeben:
GetData(LPRData[] data);
Es kehrt mit Erfolg zurück, aber die Daten im LPRData-Array haben sich nicht geändert.
Ich habe sogar versucht, einen rohen Byte-Array die Größe von 3 LPRData erstellen zu können und die in einen Funktionsprototyp wie dies passiert:
GetData (byte [] data);
Aber in diesem Fall werde ich die Zeichenfolge "Daten" aus der allerersten LPRData Struktur, aber nichts danach, einschließlich der "Prob" -Array von der gleichen LPRData.
Irgendwelche Ideen, wie man richtig damit umgeht?
Ich habe diesen Ansatz verwendet, aber ich bekomme Ausnahmen in Mono, dass die Variablen auf Null-Referenzen gesetzt sind. Zum Beispiel ist "prob" null, also will es nicht funktionieren. Soll ich diese irgendwann neu schreiben, oder soll das irgendwie durch das Framework gehandhabt werden? Vielen Dank – swinefeaster