Как компилировать с помощью Borland C++ 5.5 без startup code

Алексей Ярославский [trexinc@yandex.ru]trexinc@yandex.ru

Во время написания Position Saver я столкнулся с небольшой проблемой, размер DLL-а который выдавал мой BCC 5.5 был просто страшным, в районе 80KB. Я почитал статьи из энциклопедии и попытался компилировать без startup code (c0d32.obj). Размер файла уменьшился но плагин перестал загружаться в ФАРе. Оказалось что ilink32.exe при компилирование C++ файлов без startup code неправильно выставлял entry point что и приводило к неработоспособности плагина. Я начал искать на инете информацию о ручном выставление entry point с помощью BCC и нашел что такой возможности он не даёт. Я уже готов был сдаться но в последнюю минуту нашел то что искал.

Так как Борландские компиляторы не дают вручную задавать entry point то нужно линковать с программой, объект который будет содержать уже готовую "entry point". Такой объект можно создать из ниже приведенного ASM файла:

.386p

_TEXT SEGMENT DWORD USE32 PUBLIC 'CODE'
_TEXT ENDS

_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS

_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS

DGROUP GROUP _DATA, _BSS

ASSUME CS:_TEXT, DS:DGROUP

_TEXT SEGMENT PUBLIC DWORD USE32 'CODE'

PUBLIC EntryPoint
PUBLIC __acrtused

__acrtused label byte

EntryPoint proc near
    mov eax, 1
    ret 12
EntryPoint endp

_TEXT ENDS

END EntryPoint

Объектный модуль полученный после компиляции этого файла (с помощью Turbo Assembler-а) можно линковать вместе с программой для получения работающего DLL-а без startup code с помощью BCC 5.5.

Более подробную информацию можно найти здесь Windows Developer Magazine Online.


 
02.06.2002
наверх