|
Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Сборка очень маленьких программ в Borland C++ BuilderЗдесь описан порядок сборки программ или DLL не нуждающихся ни в VCL ни в RTL. Собрать программу без VCL позволяет Wizard создания консольного приложения. Как же собрать программу без RTL? Обычным образом собрать самостоятельную программу размером меньше 50Kb не позволяет постоянное присутствие в её теле ссылок на функции RTL(Runtime Library), даже если вы в них и не нуждаетесь. Наличие этих функций обусловлено тем, что Builder добавляет к программе стартовый код, который работает первым при запуске программы и только затем передаёт управление на вашу точку входа в зависимости от типа программы: main, WinMain, DllMain или DllEntryPoint. Этот стартовый код добавляется в секции файла описания проекта BPR <LINKER> ALLOBJ. В этом поле перечисленны объектные файлы, в порядке их добавления в тело программы. На первое место Builder ставит файл:
Чтобы избавиться от присутствия кода 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, что вполне приемлемо, к тому же там уже зарезервированно место под ваш код. Рабочие примеры вы можете взять здесь |
Форум Программиста
Новости
Обзоры
Магазин Программиста
Каталог ссылок
Поиск
Добавить файл
Обратная связь
Купить захваты вакуумные prof-pt.ru.
|