У меня есть следующая структура в C ++:
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
И функция, которую я запускаю, чтобы получить массив из 3 таких структур:
void GetData(LPRData *data);
В C ++ я бы просто сделал что-то вроде этого:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData( Results );
И это будет работать нормально, но в C # я не могу заставить его работать.
Я создал структуру C # примерно так:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
И если я инициализирую массив из 3 из них (и всех их подмассивов) и передам его в это:
GetData(LPRData[] data);
Возвращается с успехом, но данные в массиве LPRData не изменились.
Я даже пытался создать необработанный байтовый массив размером 3 LPRData и передать его в прототип функции следующим образом:
GetData (данные байта []);
Но в этом случае я получу строку «data» из самой первой структуры LPRData, но ничего после нее, включая массив «prob» из того же LPRData.
Есть идеи, как правильно с этим справиться?