Compartir a través de


EXPORTS

Introduce una sección con una o varias definitions correspondientes a funciones o datos exportados. Cada definición debe aparecer en una línea independiente.

EXPORTS
definitions

Comentarios

La palabra clave EXPORTS puede estar en la misma línea que la primera definición o en una línea anterior. El archivo .def puede contener una o varias instrucciones EXPORTS.

La sintaxis para definitions es:

entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

entryname es el nombre de la variable o función que se desea exportar. Esta información es necesaria. Si el nombre que se exporta es diferente del nombre de la DLL, especifique el nombre de la exportación en la DLL con internalname. Por ejemplo, si la DLL exporta una función, func1(), que se desea utilizar como func2(), se debería especificar:

EXPORTS
func2=func1

@ordinal permite especificar que la tabla de exportaciones de la DLL incluirá un número, y no el nombre de la función. De esta forma, se puede reducir el tamaño de la DLL. El archivo .LIB incluirá la correspondencia entre el ordinal y la función, lo que permite utilizar el nombre de la función como normalmente se haría en proyectos que utilizan la DLL.

La palabra clave opcional NONAME permite exportar únicamente mediante el ordinal y reducir así el tamaño de la tabla de exportaciones en la DLL resultante. No obstante, si desea utilizar GetProcAddress en la DLL, deberá conocer el ordinal, ya que el nombre no será válido.

La palabra clave PRIVATE impide que se incluya entryname en la biblioteca de importación generada mediante LINK. Sin embargo, no tiene efecto en la exportación de la imagen también generada por LINK.

La palabra clave opcional DATA especifica que una exportación es de datos, no de código. Por ejemplo, se puede exportar una variable de datos del siguiente modo:

EXPORTS
i DATA

Cuando se utiliza PRIVATE y DATA para la misma exportación, PRIVATE debe ir antes de DATA.

Existen tres métodos para exportar una definición, que se indican en el orden de uso recomendado:

  1. La palabra clave __declspec(dllexport) en el código fuente.

  2. Una instrucción EXPORTS en un archivo .def.

  3. Una especificación /EXPORT en un comando LINK.

Los tres métodos se pueden utilizar en el mismo programa. Cuando LINK genera un programa que contiene exportaciones, crea además una biblioteca de importación, a menos que se utilice un archivo .exp en la generación.

A continuación, se muestra un ejemplo de sección EXPORTS:

EXPORTS
   DllCanUnloadNow      @1     PRIVATE   DATA
   DllWindowName = Name        DATA
   DllGetClassObject    @4 NONAME   PRIVATE
   DllRegisterServer    @7
   DllUnregisterServer

Observe que cuando se exporta una variable desde una DLL con un archivo .def, no es necesario especificar __declspec(dllexport) en la variable. No obstante, en cualquier archivo que use la DLL, se debe seguir utilizando __declspec(dllimport) en la declaración de datos.

Vea también

Referencia

Reglas para instrucciones de definición de módulos