¿Hay alguna forma de crear automáticamente contenedores p/invoke para .net desde un encabezado c?¿Crea automáticamente envoltorios de C# desde c encabezados?
Por supuesto que podría crear a mano, pero manteniendo ellos sería doloroso, y probablemente sería un error en alguna parte como resultado difícil de accidentes de depuración.
me trataron TRAGO, pero creó clases completos donde estructuras simples sería suficiente. Otro problema con SWIG es que requiere código de interoperabilidad adicional en el lado c.
Prefiero que la salida funcione también en mono, pero eso no es necesario.
Otra cosa que podría trabajar con una aplicación que analiza el encabezado c, y crea una salida en un bonito formato intermedio como XML, de la que puede crear el C# derivador de mí mismo.
Edit:
PInvoke Interop Assistant es lo que necesitaba.
Hay algunos pequeños problemas con él sin embargo:
* Se traduce "unsigned char *" a cadena donde yo preferiría IntPtr
* Asume que size_t = int = tiempo = 32 bits. Esto es actualmente cierto para mí, pero podría no ser cierto en todas las plataformas.
¿Hay una manera limpia de arreglar eso? De lo contrario, usaré un poco de buscar y reemplazar en el código c antes de convertirlo.
Estoy de acuerdo con el Asistente de Interoperabilidad. Tenga en cuenta que la GUI tiene un error molesto (duración limitada, molesto si quiere traducir muchos archivos de encabezado) y el código C# generado para los campos de bits no solo es realmente feo, sino también incorrecto (es decir, usted * debe * verificar el código de campo de bit manualmente). Para cualquier cosa, excepto los campos de bits, encontré que funciona bien, aunque lo primero que hago con el código es eliminar los espacios de nombres largos ('System.Runtime.InteropServices' para cada atributo). – OregonGhost
Hay algunos pequeños problemas con él. Traduce "char sin signo *" a la cadena donde prefiero IntPtr, y asume que int = largo = 32 bits. ¿Hay alguna manera limpia de arreglar eso? De lo contrario usaré un poco de buscar y reemplazar en el código c antes de convertirlo. – Winner
Esas son las ambigüedades de las que te advertí. De ninguna manera limpia, tener que retocar la declaración de P/Invoke generada es normal. Por cierto: int y long son 32 bits en la mayoría del código C/C++. –