1.4.4a1 Ejemplo de fichero de definición .DEF
§1 Sinopsis
A continuación se incluye un fichero .DEF junto con un comentario detallado de sus diversas secciones.
; fichero .DEF de ejemplo
NAME HOLA
DESCRIPTION 'C++ Windows Hola Mundo'
EXETYPE WINDOWS
CODE MOVEABLE
DATA MOVEABLE MULTIPLE
HEAPSIZE 1024
STACKSIZE 5120
EXPORTS MainWindowProc
Comentario
NAME Indica el nombre de un ejecutable normal. Si se desea construir una DLL, debe utilizarse la sección LIBRARY en sustitución de esta. Cualquier fichero DEF debe tener alguna de estas dos secciones, pero no ambas al mismo tiempo. Recuerde que este nombre debe coincidir con el del ejecutable.
DESCRIPTION Es una cadena que permite especificar libremente determinadas características del ejecutable o librería.
EXETYPE es WINDOWS [1].
CODE determina los atributos por defecto del segmento de código. El argumento MOVEABLE significa que este segmento puede ser movido en tiempo de ejecución.
DATA determina los argumentos por defecto del segmento de datos. En este caso, MOVEABLE significa que puede ser movido en memoria en tiempo de ejecución. Por su parte, MULTIPLE garantiza que cada instancia de la aplicación dispondrá de su propio segmento de datos [2].
HEAPSIZE especifica el tamaño del montón ( 1.3.2).
STACKSIZE especifica el tamaño de la pila ( 1.3.2). Recuerde que no debe utilizar esta variable si pretende crear una DLL.
EXPORTS relaciona aquellas funciones de la aplicación HOLA que pueden ser invocadas por otras aplicaciones o por el mismo Windows (las "callbacks"). Recuerde que los compiladores BC++ y MSVC proveen de los especificadores __declspec(dllexport) y __export, de forma que las funciones declaradas con ellos no necesitan ser incluidas en esta sección.
Observe que esta aplicación no tiene sección IMPORTS, porque suponemos que las únicas funciones que utiliza de otros módulos son de la API de Windows ( 1.7.1) y estas funciones son importadas mediante la inclusión de IMPORT32.LIB (esta librería es incluida automáticamente por BC++ en el proceso de construcción de un ejecutable Windows). Recuerde que cuando una aplicación necesita invocar funciones externas (situadas en librerías dinámicas), dichas funciones deben ser incluidas en la sección IMPORTS, o en una librería de importación ( 1.4.4b2c) enlazada estáticamente con la aplicación.
La aplicación presentada no incluye la sección STUB. Suponemos que se compila con BC++ y no incluimos nada en esta opción, ya que esta plataforma de desarrollo dispone de un "Stub" preconstruido que es utilizado por defecto si no se especifica explícitamente otro ejecutable.
Nota: Este stub por defecto es el responsable de que si pretendemos correr una
aplicación desarrollada para Windows32 en una máquina MS DOS, aparezca
un mensaje: This program must be run under Win32
.
[1] La documentación que acompaña al compilador Borland C++ 5.5 indica que esta versión solo soporta WINDOWS como parámetro de la variable EXETYPE. No obstante, esta se mantiene solo por cuestiones de compatibilidad, y debe ser sustituida por NAME o LIBRARY.
[2] Recuerde que Windows es un sistema operativo que permite multiprogramación ( 1.7). Cada programa en ejecución se denomina "instancia" y estas instancias pueden ser del mismo ejecutable.