he tenido este problema con C# cuando yo estaba usando DotNet1.1Cambio de una convención de llamada de C# delegado a CDECL
El problema es el siguiente. Tengo un dll no administrado, que tiene una función que toma un puntero de función (entre otros argumentos). Cuando declaro el DLLImport en código C#, paso un delegado. Pero los delegados en C# tienen la convención de llamadas stdcall
mientras que la función no administrada espera un puntero de función cdecl
. Por lo tanto, mi enfoque ingenuo resultó en bloqueos. Luego encontré lo siguiente: http://www.codeproject.com/KB/cs/cdeclcallback.aspx Un tipo escribió una excelente biblioteca que permite cambiar las convenciones de llamadas del delegado por, como yo entendía, MSIL-hacking. Las cosas fueron bien, hasta ...
He migrado a VS2008 y la nueva versión de .NET. En esta versión, la biblioteca mencionada no funciona. No soy realmente un experto en C# o .NET, y, a decir verdad, apenas entiendo lo que hace su biblioteca (aunque es de código abierto), así que ni siquiera quiero tratar de adaptarlo a .NET nuevo. Sin embargo, espero que la versión más nueva de C# tenga alguna solución mejor disponible para mi problema.
Por lo tanto, lo que los expertos, por favor me ayudan con mi dolor en las nalgas :)
¿Puedo asignar una función normal de C# a ella? –
Sí, puedes hacer eso. –
Muchas gracias. Funciona perfectamente. ¡Salvaste mi día! –