Pregunta

Solo estoy buscando una explicación simple y concisa de la diferencia entre estos dos.MSDN no entra en muchos detalles aquí.

¿Fue útil?

Solución

  • __declspec(dllexport) le dice al vinculador que desea que este objeto esté disponible para que otras DLL lo importen.Se utiliza al crear una DLL a la que otros pueden vincular.

  • __declspec(dllimport) importa la implementación desde una DLL para que su aplicación pueda usarla.

Sólo soy un desarrollador novato de C/C++, así que quizás alguien tenga una explicación mejor que yo.

Otros consejos

__declspec( dllexport ) - La clase o función así etiquetada se exportará desde la DLL en la que está integrada.Si está creando una DLL y desea una API, necesitará usar este o un archivo .DEF separado que defina las exportaciones (MSDN).Esto es útil porque mantiene la definición en un solo lugar, pero el archivo .DEF ofrece más opciones.

__declspec( dllimport ) - La clase o función así etiquetada se importará desde una DLL.En realidad, esto no es necesario: necesita una biblioteca de importación. de todos modos para hacer feliz al enlazador.Pero cuando está debidamente marcado con dllimport, el compilador y el vinculador tienen suficiente información para optimizar la llamada;sin él, obtienes un enlace estático normal a una función auxiliar en la biblioteca de importación, lo que agrega una dirección indirecta innecesaria. ONT1 ONT2

Dos casos de uso diferentes:

1) Estás definiendo una implementación de clase dentro de una dll.Quieres que otro programa use la clase.Aquí utiliza dllexport mientras crea una clase que desea que la dll exponga.

2) Estás utilizando una función proporcionada por una dll.Incluye un encabezado suministrado con la dll.Aquí el encabezado usa dllimport para incorporar la implementación que utilizará el programa actual.

A menudo se utiliza el mismo archivo de encabezado en ambos casos y se define una macro.La configuración de compilación define la macro que se importará o exportará según sea necesario.

Dllexport se utiliza para marcar una función como exportada.Implementa la función en su DLL y la exporta para que esté disponible para cualquiera que use su DLL.

Dllimport es lo contrario:marca una función como importada desde una DLL.En este caso solo declaras la firma de la función y vinculas tu código con la biblioteca.

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