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ć?

questionAnswers(5)

yourAnswerToTheQuestion