Я имею следующую структуру в C++:фельдмаршала C++ структура массива в 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 не изменились.
Я даже пытался создать RAW-байтовый массив, размер 3 LPRData и передают, что в прототипе функции, как это:
GetData (байт [] данных);
Но в этом случае я получу строку «данных» из самой первой структуры LPRData, но после нее ничего не останется, включая массив «prob» из той же LPRData.
Любые идеи о том, как правильно обращаться с этим?
следует строка 11 либо: изменение '+ = `в` = `и` `ToInt32` к ToInt64`, если 64-разрядное; или, удалите `значение.ToInt32()`? – maxwellb 2010-07-08 19:20:03
@maxwellb, да. Код, написанный, не является 64-битным. – JaredPar 2010-07-08 19:59:45