Compartir a través de


Determinar el método de exportación que se debe utilizar

Puede exportar funciones en dos del archivo de las maneras - uno .def o palabra clave de __declspec(dllexport) . Para ayudarle a decidir qué es mejor para el archivo DLL, considere estas preguntas:

  • ¿Pretende exportar más funciones más adelante?

  • ¿DLL sólo se utiliza en las aplicaciones que puede recompilar, o bien usan las aplicaciones que no puede recompilar- para el ejemplo, las aplicaciones creadas por terceros?

Ventajas y desventajas de utilizar archivos .def

Exportar funciones de un archivo .def permite controlar sobre los ordinales de exportación. Al agregar una función exportada a la DLL, puede asignar un valor ordinal más alto que cualquier otra función exportada. Cuando lo haga, las aplicaciones que utilizan la vinculación implícita no tienen que volver a vincularse a la biblioteca de importación que contiene la nueva función. Esto es muy útil si está diseñando un archivo DLL para uso de muchas aplicaciones porque puede agregar nueva funcionalidad y asegurarse también de que continúa funcionando correctamente con aplicaciones que confían ya en ella. Por ejemplo, los archivos DLL de MFC se compilan utilizando archivos .def.

Otra ventaja de utilizar un archivo .def es que puede utilizar el atributo de NONAME exportar una función. Esto sólo coloca el ordinal en la tabla de exportaciones de DLL. Para los archivos DLL con un gran número de funciones exportadas, mediante el atributo de NONAME puede reducir el tamaño del archivo DLL. Para obtener información sobre cómo escribir una instrucción de definición de módulo, vea Reglas para instrucciones de definición de módulos. Para obtener información acerca de la exportación ordinal, vea Exportar funciones desde un archivo DLL por ordinal en lugar de por nombre.

Una desventaja de utilizar un archivo .def es que si exporta funciones de un archivo de c++., tiene que colocar los nombres representativos en el archivo .def o definir las funciones exportadas mediante extern “C” para evitar la decoración de nombres que es realizada por el compilador de Visual C++.

Si coloca los nombres representativos en el archivo .def, puede obtenerlos mediante la herramienta de DUMPBIN o con la opción de /MAP del vinculador. Los nombres representativos generados por el compilador son compilador- específicos; por consiguiente, si coloca los nombres representativos generados por el compilador en un archivo .def, también deberán generarse las aplicaciones que se vinculan al archivo DLL mediante la misma versión del compilador para los nombres representativos en la coincidencia de la aplicación que realiza la llamada los nombres exportados en el archivo .def del archivo DLL.

Ventajas y desventajas de utilizar __declspec(dllexport)

Mediante __declspec(dllexport) es conveniente porque no tiene que preocuparse de mantener un archivo .def y obtener los nombres representativos de las funciones exportadas. Sin embargo, la utilidad de esta manera de exportar está limitada por número de aplicaciones vinculadas que está dispuesto recompilar. Si recompila el archivo DLL con nuevas exportaciones, también tiene que recompilar las aplicaciones porque los nombres representativos de las funciones de C++ exportadas podrían cambiar si utiliza una versión diferente del compilador para recompilarlo.

¿Qué desea hacer?

¿Sobre qué desea obtener más información?

Vea también

Conceptos

Exportar desde un archivo DLL