htm=articulo/pequecpp.htm ok articulo/pequecpp.htm Pequeño programa creado con Builder C++.

Pequeño programa creado con Builder C++.

Este artículo describe el modo de crear ejecutables de pequeño tamaño bajo windows-32bits cuando solo se van a usar las funciones del API. Un programa de Builder C++ sin ventanas ocupa 150 Kb o más, sin embargo el programa del ejemplo tiene un tamaño de solo 4 Kb.


Un programa creado con Builder C++ tiene normalmente un tamaño mayor de 150 Kb, incluso si se elimina toda referencia a la librería VCL y solo se usan funciones del API. En principio podemos pensar que usando solo funciones del API un programa no debería tener este tamaño, sin embargo Builder C++ incluye en cada programa el módulo de arranque C0W32.OBJ. Este módulo lleva a cabo varias inicializaciones en las librerías del Builder y provoca que estas partes de las librerías se incluyan en el ejecutable, aunque luego el programa no haga uso de ellas.

Para generar un ejecutable con un tamaño mínimo será necesario eliminar en la compilacion el módulo de arrranque normal y sustituirlo por otro creado al efecto. Hay que tener en cuenta que el uso de algunas porciones de las librerías de borland pueden provocar errores debidos a la falta de inicializacion.

El ejemplo que se muestra a continuacion consta de un fichero de inicializacion (BINIT.ASM) y un fichero fuente (MINI.CPP) que contiene una llamada al API (MessageBox). Se incluye tambien un Makefile para compilar el ejemplo (Solo hay que ejecutar MAKE.EXE para generar el programa), el programa solo usa la librería de importacion IMPORT32.LIB.


BINIT.ASM

; arranque del programa-minimo (Borland-Builder)

.386
Locals
jumps
 
.model flat, stdcall

extrn   ExitProcess : PROC
extrn   WinMain     : PROC

.data

.code

Main:
    xor eax, eax
    push eax
    push eax
    push eax
    push eax
    call WinMain
    push eax
    call ExitProcess
End      Main

MINI.CPP

//-----------------------------
#include <windows.h>
#pragma hdrstop
//--------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    MessageBox(NULL, "Probando ...", "MiniApp", MB_ICONINFORMATION);
    return 0;
}

MAKEFILE

# ----------------------------------------------------
#           MINI.EXE
# ----------------------------------------------------

!if !$d(BCB)
BCB = $(MAKEDIR)\..
!endif

CFLAGS = -c -O2  -I$(BCB)\include 
AFLAGS = /mx /m3 
LFLAGS = -c -n -aa -Tpe -L$(BCB)\lib 

OBJS   =  mini.obj binit.obj
LIBS   =  import32.lib

All:
   bcc32   $(CFLAGS)   mini.cpp
   tasm32  $(AFLAGS)   binit.asm
   tlink32 $(LFLAGS)   $(OBJS),mini.exe,,$(LIBS)

Puedes descargar un ejemplo un poco más completo que crea una ventana con barras de scroll y tambien inicializa los parámetros de WinMain a sus valores reales.


© info3@maicas.net