Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Borland C++ Builder - Все статьи »

Обсудить на форуме Обсудить на форуме

Сборка очень маленьких программ в Borland C++ Builder

Здесь описан порядок сборки программ или DLL не нуждающихся ни в VCL ни в RTL.

Собрать программу без VCL позволяет Wizard создания консольного приложения. Как же собрать программу без RTL?

Обычным образом собрать самостоятельную программу размером меньше 50Kb не позволяет постоянное присутствие в её теле ссылок на функции RTL(Runtime Library), даже если вы в них и не нуждаетесь. Наличие этих функций обусловлено тем, что Builder добавляет к программе стартовый код, который работает первым при запуске программы и только затем передаёт управление на вашу точку входа в зависимости от типа программы: main, WinMain, DllMain или DllEntryPoint. Этот стартовый код добавляется в секции файла описания проекта BPR <LINKER> ALLOBJ. В этом поле перечисленны объектные файлы, в порядке их добавления в тело программы. На первое место Builder ставит файл:

  • c0x32.obj - для программ с точкой входа - main.
  • c0w32.obj - для программ с точкой входа - WinMain.
  • c0d32.obj - для DLL с точкой входа - DllMain или DllEntryPoint.

Чтобы избавиться от присутствия кода RTL, необходимо вручную подправить файл проекта BPR и подставить свой стартовый код, который может состоять из одной команды jmp:

                .386P
ifndef MASM
                model flat
LOCALS
endif
                ASSUME   CS: FLAT, DS: FLAT, SS: FLAT, ES: FLAT

;----------------------------------------------------------------------
; Code segment

_TEXT           SEGMENT PUBLIC DWORD USE32 PUBLIC 'CODE'
_TEXT           ENDS

;----------------------------------------------------------------------
; External function definitions

_TEXT           SEGMENT PUBLIC DWORD USE32 PUBLIC 'CODE'

;;;; EXTRN           main:NEAR
;;;; EXTRN           WinMain:NEAR
EXTRN          DllMain:NEAR
;;;; EXTRN          DllEntryPoint:NEAR

_TEXT           ENDS


;----------------------------------------------------------------------
; Startup code

_TEXT           SEGMENT  DWORD USE32 PUBLIC 'CODE'

                public __acrtused
__acrtused      PROC NEAR

;;;;                jmp     main
;;;;                jmp     WinMain
                jmp     DllMain
;;;;                jmp     DllEntryPoint

__acrtused      ENDP

_TEXT           ENDS

                END     __acrtused

Чтобы откомпилировать данный файл достаточно его вставить в любой проект и сделать Compile, после чего его можно убрать из проекта.

Сделав объектный файл своего стартового кода, вы можете указать его в файле BPR. Например если ваш файл называется Myc0d32.obj, то секция <LINKER> будет выглядеть так:

 <LINKER>
  <ALLOBJ value="Myc0d32.obj $(OBJFILES)"/>
  <ALLRES value="$(RESFILES)"/>
  <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib"/>
  </LINKER>

Указание Myc0d32.obj именно в секции <LINKER> на первом месте, гарантирует вам то, что ваш стартовый код будет действительно стартовым. Но ничто не мешает вам просто указать его первым в определении OBJFILES.

В итоге:

Вы получаете возможность собирать маленькие программы написанные на C, используя Borland C++ Builder. При этом вы конечно лишаетесь всех прелестей RTL. Но в вашем распоряжении WinApi. Минимальный размер получаемых программ около 4Kb, что вполне приемлемо, к тому же там уже зарезервированно место под ваш код.

Рабочие примеры вы можете взять здесь


Может пригодится:


Автор: XPortal
Прочитано: 13866
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (1)

Прислал: Goldseo
Спасибо за примеры, очень пригодились! Респект!

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру