Estoy tratando de pasar una estructura de C# a la biblioteca C++. Paso estructura como un objeto, y la función C++ lo espera como un puntero (void *).¿Cómo clasifico una estructura como un puntero a una estructura?
Tengo problemas para pasar la estructura.
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
Aquí está el texto de la excepción de tiempo de ejecución consigo:
"No se puede reunir 'parámetro # 1': no válida gestionado/combinación de tipo no administrado (este tipo de valor debe estar emparejado con Struct). "
Aunque encontré un artículo de MSDN que usa LPStruct exactamente en este contexto.
Ésta es mi estructura que estoy tratando de Mariscal:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
Esta es la función C++:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
Ni siquiera necesita el [MarshalAs] en este caso, creo. –
@ Antón, está en lo correcto (actualizado) – JaredPar
Resultado final de trabajo: public static extern IntPtr TheFunction ([MarshalAs (UnmanagedType.Struct), In] ref UserRec userRec); Y [MurshalAs] aquí es solo para hacerlo explícito, pero no obligatorio. –