Hola,
Parecido al paso de parámetros de char* de una consulta anterior.
Ahora me encuentro con problemas al pasar un parámetro struct. Me
explico:
Libreria C, (dll):
// La estructura de datos.
struct estructura {
char nombre[100];
int valor;
}
DllExport int funcion(struct estructura *datos) {
struct estructura *temporal;
// Operaciones para llenar el array.
// ...
// Devolver el array, (parámetro por referencia).
memset(datos, 0, sizeof(struct estructura));
memcpy(datos, temporal, sizeof(struct estructura));
free((void *)temporal);
}
Y en C#:
// La estructura en c#
[StructLayout(LayoutKind.Sequential)]
public class est_info_prob_pal {
public char[] nombre;
public int valor;
}
// La función para usar desde C#
[DllImport(baseDir + "libreriaC.dll")]
unsafe private extern static int funcion([Out,
MarshalAs(UnmanagedType.LPStruct)] estructura datos);
public static estructura laFuncion() {
estructura datos = new estructura();
datos.nombre = new char[100];
int ret = funcion(datos);
return datos;
}
Esto produce un error de corrupción de memória al hacer la llamada a
funcion(datos) desde C#.
La idea es que desde C# pase una estructura de datos que la librería C
cambiará y los devolverá por referencia. He intentado hacer algo
parecido a lo que he hecho para pasar por referencia char*, pero no
funciona. ¿Alguien podria decirme que estoy haciendo mal?
Saludos,
Jose Luis
Leer las respuestas