![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL без SysInit.pas и System.pas
ph0sgen © (2006-08-11 19:52:00)Здравствуйте, уважаемые мастера.
Пытаюсь написать DLL отказавшись от стандартных
модулей SysInit.pas и System.pas.
Какое минимальное содержание должны иметь эти модули
для коррекной работы?
если кто сталкивался, прошу откликнуться.
заранее благодарен.
ANTPro (2006-08-13 20:28:00) [21]2Чапаев
dcc32.exe -Q system.pas sysinit.pas -M -Y -Z -$D- -O
2XProger
У тебя есть более функциональные модули?
Чапаев (2006-08-13 19:53:00) [22]> [12] XProger © (13.08.06 19:33)
Только как скомпилить System и SysInit? dcc32 говорит, что невозможно использовать зарезервированное имя.
Ketmar (2006-08-13 19:43:00) [23]> [12] XProger © (13.08.06 19:33)
не всё так просто. для пустой dll -- да. а если там код, то такими "заглушками" не всегда обойтись можно.
совсем оффтоп: а вот если это это
Function AddNumbers ( Byval operand1 As Integer, _
Byval operand2 As Integer ) As Integer export
Return operand1+operand2
End Function
собрать FreeBASIC'ом, получится DLL на 5 кил. и никаких танцев с бубнами. все на FreeBASIC! (кстати, удобная штука %-).
XProger (2006-08-13 19:33:00) [24]jack128, а зачем занимать эту пару килобайт на диске? Зачем добавлять в моё приложение код работы со строками, динамическими массивами, менеджера памяти, RTL и прочих не нужных мне (в данном проекте) функций?
Спортивный интерес имхо :)
ph0sgen,
SysInit.pas
unit SysInit;
interface
procedure _InitExe;
procedure _halt0;
procedure _InitLib(Context: PInitContext);
var
ModuleIsLib : Boolean;
TlsIndex : integer = -1;
TlsLast : Byte;
const
PtrToNil: pointer = nil;
implementation
procedure _InitLib(Context: PInitContext);
asm
LEAVE
RET 12
end;
procedure _InitExe;
asm
end;
procedure _halt0;
asm
end;
end.
System.pas
unit System;
interface
procedure _HandleFinally;
type
TGUID = record
D1: LongWord;
D2: Word;
D3: Word;
D4: array [0..7] of Byte;
end;
PInitContext = ^TInitContext;
TInitContext = record
OuterContext : PInitContext;
ExcFrame : pointer;
InitTable : pointer;
InitCount : integer;
Module : pointer;
DLLSaveEBP : pointer;
DLLSaveEBX : pointer;
DLLSaveESI : pointer;
DLLSaveEDI : pointer;
ExitProcessTLS : procedure;
DLLInitState : Byte;
end;
implementation
procedure _HandleFinally;
asm
end;
end.
dll.dpr
library dll;
begin
// blablabla
end.
make.bat
dcc32 dll.dpr -m -y
dcc32 dll.dpr
Проверено на компиляцию в dcc32.exe 18 версии (Delphi 10)
jack128 (2006-08-13 17:55:00) [25]а можно узнать, зачем всё это??пары килобайт на винте жалко?
ANTPro (2006-08-13 02:02:00) [26]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1131453880&n=10
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1147450294&n=10
ANTPro (2006-08-13 00:20:00) [27]Придется ковырять самому :(
пока минимум 5120 б
Ketmar (2006-08-12 23:55:00) [28]> [7] ANTPro © (12.08.06 23:49)
не могу -- Заратустра запрещает. %-) остались только .dcu, и те заточены под конкретную программку.
ANTPro (2006-08-12 23:49:00) [29]Ketmar © (12.08.06 22:59) [6]
лично делал именно так
Можешь кинуть куда-нибуть поглядеть, че-то не получается :(
Ketmar (2006-08-12 22:59:00) [30]> [5] Stexen (12.08.06 22:54)
а вот и не угадал. ещё много чего нужно. а что конкретно -- зависит от задачи. потому и говорю -- усекать, пока не упадёт. лично делал именно так. %-)
Stexen (2006-08-12 22:54:00) [31]хм, наверняка нужны только описание апи функций, соответсвенно описываешь у себя и все, а вообще возми aspack и не мучайся...
Ketmar (2006-08-12 19:50:00) [32]> [0] ph0sgen © (11.08.06 19:52)
берёшь и усекаешь. до момента, пока не перестанет работать.
apic (2006-08-12 17:18:00) [33]Да уж куда меньше!!! Попробуй на ASM
ph0sgen (2006-08-11 20:08:00) [34]мне нужно минимальное содержание, лишь бы компилятир не орал.
а дальше справлюсь
Мефисто (2006-08-11 19:58:00) [35]Что твое приложение требует, то и вставляй из соотвествующих юнитов. Телепатов нет. Откуда нам знать, что тебе понадобится из данных юнитов для его работы.
P.S. А если задуматься, шкурка выделки стоит?