Tengo la siguiente estructura en C++:Mariscal C++ gama struct en C#
#define MAXCHARS 15
typedef struct
{
char data[MAXCHARS];
int prob[MAXCHARS];
} LPRData;
y una función que soy p/invocando a conseguir una serie de 3 de estas estructuras:
void GetData(LPRData *data);
en C++ yo sólo haría algo como esto:
LPRData *Results;
Results = (LPRData *)malloc(MAXRESULTS*sizeof(LPRData));
GetData(Results);
Y que iba a funcionar muy bien, pero en C# me parece que no puede conseguir que funcione. He creado un C# estructura como esta:
public struct LPRData
{
/// char[15]
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 15)]
public string data;
/// int[15]
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 15)]
public int[] prob;
}
Y si inicializar una matriz de 3 de ellos (y todos sus sub-arrays) y pasarlo a esto:
GetData(LPRData[] data);
Se regresa con éxito, pero los datos en la matriz LPRData no han cambiado.
incluso he tratado de crear una matriz de bytes en bruto del tamaño de 3 de LPRData y pasar eso en un prototipo de función como esta:
GetData (byte [] de datos);
Pero en ese caso obtendré la cadena de "datos" desde la primera estructura LPRData, pero nada después de ella, incluida la matriz "prob" del mismo LPRData.
¿Alguna idea de cómo manejar esto correctamente?
He utilizado este enfoque, pero tengo excepciones en Mono que las variables se establecen en referencias nulas. Por ejemplo, "prob" es nulo por lo que no quiere funcionar. ¿Se supone que estoy renovando estos en algún momento, o se supone que el marco debe manejarlo de alguna manera? Gracias – swinefeaster