Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


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.

  Inicio.


[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.