c# c pinvoke

c# - ¿La forma más fácil de generar código P/Invoke?



pinvoke (2)

Consulte http://dotnetperls.com/dllimport-interop para ver un ejemplo de interoperabilidad y este artículo de MSDN para obtener más información. La biblia para estas cosas es el book Adam Nathan .

Básicamente, deberá identificar las funciones en la DLL a la que desea llamar. Estos deben estar marcados con extern para que sean accesibles al mundo exterior. El siguiente paso, que puede ser complicado, es escribir un DllImport para la función. Esto necesita mapear entre los mundos administrados y no administrados. Tendrá que encontrar la forma de reunir las estructuras de datos complejas de la dll C a código administrado.

Debería verificar si hay algún tipo de interfaz COM para la DLL. Asegúrate de que realmente necesitas usar P / Invoke primero.

SWIG fue originalmente para envolver el código C / C ++ para su uso desde lenguajes de scripting. Genera código C # a partir de una descripción de la interfaz (ver tutorial ). No recomendaría usarlo desde C # si P / Invoke es una opción.

Soy un programador .Net experimentado, pero no he compilado un programa C / C ++ en mi vida. Ahora tengo esta C-dll, encabezados y documentación (de terceros, no de Win API), desde la cual necesito llamar sobre diez métodos.

Estaba pensando en usar Platform Invoke. Encontré estas tres herramientas que crearían el código para mí:

y posiblemente

Pinvoker parece tener un enfoque un poco diferente que el asistente de interoperabilidad y el asistente. El trago que acabo de encontrar al verificar que esta pregunta no se ha hecho aquí.

¿Cuáles son los pros y los contras de estas herramientas?

¿Cuál sería la mejor manera más fácil y segura de producir el código P / Invoke dado que no sé mucho sobre C / C ++?


Si las firmas de las funciones son simples, la configuración debería demorar 10 minutos, es decir, si toman 2 caracteres * y devuelven un int. Es solo una vez que se complican que se ensucia.

La biblia en Pinvoke es Adam Nathans - .NET y COM: la guía completa de interoperabilidad

Y estoy de acuerdo con el otro póster. Swig no es lo correcto.