Pregunta

  1. ¿Cuál es la diferencia de crear un simple archivo DLL de C entre el uso de Visual Studio 2005 y Visual C ++. Vi que cuando se crea bajo estudio también un manifiesto que fue creado y tuve algunos problemas relacionados con el despliegue en otra máquina debido al uso de la carpeta de lado a lado (cuando se llama a esa DLL forman una aplicación C # "
  2. ¿Cómo funciona el mecanismo de llamar a una DLL de trabajo?

Gracias

¿Fue útil?

Solución

Desde nobugz ya cubierto su primera pregunta, me deja expandir en el segundo. No es terriblemente difícil de entender.

Cuando se compila una DLL en Windows, el enlazador crea una tabla de exportación de direcciones (EAT) que enumera todas las funciones exportadas (las funciones de la DLL proporciona) y un puntero a los que se realizan en el propio archivo DLL.

Al compilar una aplicación que los enlaces a un archivo DLL, el enlazador crea una tabla de direcciones de importación (IAT) una lista de todas las funciones que se implementan en otro DLL y el nombre de la DLL que implementa estas funciones. La forma en que se sabe que existe una función en un archivo DLL es del archivo .lib que se agrega a su proyecto. Esto le indica al enlazador que una función se implementa en un archivo DLL.

A continuación, en tiempo de ejecución, al cargar una aplicación del cargador de Windows examina el IAT para ver qué necesidad de DLL que se carga, los localiza, y actualiza las aplicaciones de IAT (en la memoria) a punto a las funciones exportadas en el archivo DLL de carga.

Eso es lo básico de cómo funciona, espero que no incluye ninguna inexactitudes. Y, por supuesto P / Invoke es otra capa en la parte superior de esta.

Si desea más información sobre cómo el trabajo de DLL siempre existe el MSDN la documentación y si quieres lo suficiente detalle para hacer que la cabeza giro leer estos artículos dentro de Windows Parte 1 y Parte 2

Otros consejos

Sí, si se compila el código de la DLL con / MD (la configuración predeterminada), entonces usted tiene que desplegar el CRT bibliotecas a la máquina de destino. Si esto es sólo una DLL independiente sin ningún tipo de otras dependencias, entonces tiene sentido para compilar con la opción estática CRT por lo que no tiene que implementar las bibliotecas. Haga clic con el proyecto DLL, Propiedades, C / C ++, generación de código, Runtime Library = / MTd para la configuración de depuración. Repita el procedimiento para la configuración de lanzamiento, ahora usando / MT.

Google "P / Invoke cálculo de referencias" para aprender más acerca de cómo se llama código no administrado desde un programa administrado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top