Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Как компилировать с помощью Borland C++ 5.5.1 без startup code</title>
<meta http-equiv="Content-Type" Content="text/html; charset=Windows-1251">
<meta name="Author" content="Alex Yaroslavsky">
<meta name="description" content="Как компилировать с помощью Borland C++ 5.5 без startup code">
</head>
<body>

<a name="top"></a>
<h1>Как компилировать с помощью Borland C++ 5.5.1 без startup code</h1>

<div align=right><code>
Алексей Ярославский <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Fmailto%3AAlex+Yaroslavsky+%26lt%3Bat+yandex.ru+%2F+trexinc%26gt%3B%3Fsubject%3DArticles">
at yandex.ru / trexinc</a>
</code></div>

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

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

<pre class=code>
.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
</pre>

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

<p class=plain>
Более подробную информацию можно найти здесь
<a href=http://www.wd-mag.com/articles/1999/9901/9901e/9901e.htm?topic=articles>Windows Developer Magazine Online</a>.</p>

<div align=right><code>
<br>&nbsp;<br>
02.06.2002<br>
</code></div>
<div class=seecont><a href="#top">наверх</a></div>

</body>
</html>