Marshal C ++ struct array do C #
Mam następującą strukturę w C ++:
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
I funkcja, do której się odwołuję, aby uzyskać tablicę 3 z tych struktur:
void GetData(LPRData *data);
W C ++ po prostu zrobiłbym coś takiego:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData( Results );
I będzie działać dobrze, ale w C # nie wydaje mi się, żeby działało. Stworzyłem strukturę C # w ten sposób:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
A jeśli zainicjalizuję tablicę 3 z nich (i wszystkich ich macierzy podrzędnych) i przekażę to w następujący sposób:
GetData(LPRData[] data);
Zwraca się z powodzeniem, ale dane w tablicy LPRData nie uległy zmianie.
Próbowałem nawet utworzyć surową tablicę bajtów o rozmiarze 3 LPRData i przekazać ją do prototypu funkcji w ten sposób:
GetData (dane bajtowe []);
Ale w takim przypadku otrzymam ciąg „danych” z pierwszej struktury LPRData, ale nic po nim, w tym tablicę „prob” z tej samej LPRData.
Jakieś pomysły na to, jak właściwie sobie z tym poradzić?