Mam następujący struct w C++:marszałka C++ tablicy struct w C#
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
i funkcję, że jestem p/powołując się dostać tablicę 3 z tych struktur:
void GetData(LPRData *data);
w C++ byłoby po prostu zrobić coś takiego:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData(Results);
I to działa dobrze, ale w języku C# nie wydaje się uzyskać go do pracy. Utworzyłem C# struct tak:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
I jeśli zainicjować tablicę z 3 osób (i ich wszystkich sub-macierzy) i przekazać go w ten sposób:
GetData(LPRData[] data);
IT zwraca z powodzeniem, ale dane w tablicy LPRData nie uległy zmianie.
ja nawet próbuje tworzyć tablicy bajtowej surowego rozmiarze 3 LPRData tych i które przechodzą do prototypu działają jak to:
GetData (bajt [] Dane);
Ale w takim przypadku otrzymam ciąg "data" od pierwszej struktury LPRData, ale nic poza tym, łącznie z tablicą "prob" z tych samych LPRData.
Jakieś pomysły, jak prawidłowo sobie z tym poradzić?
Użyłem tego podejścia, ale dostaję wyjątki w Mono, że zmienne są ustawione na zerowe odniesienia. Na przykład "prob" ma wartość null, więc nie chce działać. Czy mam to w pewnym momencie wprowadzić na rynek, czy też powinno to w jakiś sposób być obsługiwane przez ramy? Dzięki – swinefeaster