![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модуль Classes. [Delphi, Windows]
Zak3D[@Tm] © (2004-08-13 00:39:00)Привет мастера, вот у меня какая проблема - из модуля Classes мне нужна всего одна ф-ция, это - TMemoryStream, сам модуль занимает не хило места в exe и поэтому мне надо избавиться от всего лишнего из этого модуля, но как я не старался, у меня это не получается, модуль огромный, и то и дело вылазят новые ошибки при сохранении. Кто-нибудь пробовал укоротить Classes? Если да, то буде премного благодарен за совет или помошь.
Anatoly Podgoretsky (2004-08-14 14:03:00) [1]Какой ужас, на святое покусились
GuAV (2004-08-14 13:56:00) [2]Anatoly Podgoretsky © (14.08.04 11:17) [15]
Вам ещё не попадался урезаный system.dcu ? Так знайте, он есть.
Anatoly Podgoretsky (2004-08-14 11:17:00) [3]Кстати сама идея явно обречена на провал, поскольку данный модуль практически везде используется, в том числе и в используемых компонентах. Разве что в простом консольном приложении можно без него обойтись.
Anatoly Podgoretsky (2004-08-14 00:03:00) [4]Ой не заню как смотрел, но в Д5 тоже самое :-)
Sapersky (2004-08-13 22:54:00) [5]Ага, "честный". Вот:
initialization
InitializeCriticalSection(ThreadLock);
AddModuleUnloadProc(ModuleUnload);
GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create;
ClassList := TThreadList.Create;
ClassAliasList := TStringList.Create;
IntConstList := TThreadList.Create;
GlobalFixupList := TThreadList.Create;
finalization
UnRegisterModuleClasses(HInstance);
GlobalNameSpace.BeginWrite;
FreeIntConstList;
ClassList.Free;
ClassAliasList.Free;
RemoveFixupReferences(nil, '');
GlobalFixupList.Free;
GlobalFixupList := nil;
GlobalLists.Free;
FreeThreadWindow;
GlobalNameSpace.Free;
GlobalNameSpace := nil;
RemoveModuleUnloadProc(ModuleUnload);
DeleteCriticalSection(ThreadLock);
end.
И ещё sysutils использует, так что размер минимального проекта подрастает до 60 (примерно) кб.
Я использую его для хранения Wav файла в памяти.
Ну так, может, вообще без потоков обойтись? Берём указатель (массив), читаем, инкрементируем.
GuAV (2004-08-13 21:05:00) [6]Да и у "честного" модуля
end.компилируется в sub чего-то там и RET :-P в Д? опять же.
Anatoly Podgoretsky (2004-08-13 20:24:00) [7]GuAV © (13.08.04 19:46) [10]
Понял, я смотрел в Д5, там честный модуль.
GuAV (2004-08-13 19:46:00) [8]Anatoly Podgoretsky © (13.08.04 19:10) [9]
из D7 - там это уже не честный модуль.
initialization
InitThreadSynchronization;
AddModuleUnloadProc(ModuleUnload);
{$IFDEF MSWINDOWS}
GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create;
{$ENDIF}
{$IFDEF LINUX}
GlobalNameSpace := TSimpleRWSync.Create;
{$ENDIF}
RegGroups := TRegGroups.Create;
IntConstList := TThreadList.Create;
GlobalFixupList := TThreadList.Create;
finalization
UnRegisterModuleClasses(HInstance);
GlobalNameSpace.BeginWrite;
FreeIntConstList;
RemoveFixupReferences(nil, '');
FreeAndNil(GlobalFixupList);
FreeAndNil(GlobalLists);
FreeAndNil(RegGroups);
GlobalNameSpace := nil;
RemoveModuleUnloadProc(ModuleUnload);
FreeAndNil(SyncList);
DoneThreadSynchronization;
FreeAndNil(FindGlobalComponentProcs);
end.
Anatoly Podgoretsky (2004-08-13 19:10:00) [9]Юрий Зотов © (13.08.04 17:26) [7]
У Classes как раз нет этих секций, поэтому его безопасно подлючать к любому модулю.
Zak3D[@Tm] (2004-08-13 18:53:00) [10]Sapersky
Я использую его для хранения Wav файла в памяти.
Юрий Зотов (2004-08-13 17:26:00) [11]> Zak3D[@Tm] © (13.08.04 00:39)
> сам модуль занимает не хило места в exe
Почему Вы так решили? Из любого модуля в Ваш EXE войдет только то, что Вы реально используете. Плюс код инициализации/финализации, который, если даже и есть, то обычно небольшой.
Ega23 (2004-08-13 14:54:00) [12]мне нужна всего одна ф-ция, это - TMemoryStream
С каких пор МемориСтрим стал функцией????
GuAV (2004-08-13 14:45:00) [13]Zak3D[@Tm] © (13.08.04 13:26) [2]
Ох уж эти херурги - им бы тока резать!
Попробуй лучше написать свой TMemoryStream.
---
Значит, без VCL пишешь? А может даже без SysUtils? тогда зачем Delphi ?
Anatoly Podgoretsky (2004-08-13 13:56:00) [14]Модуль Classes не добавляет ни одного байта, если из него ни чего не используется, это честный модуль.
Sapersky (2004-08-13 13:41:00) [15]Нужен именно TMemoryStream из classes.pas или произвольный объект того же назначения? Для чего он будет использоваться?
Если произвольный - могу порекомендовать KOL, там вроде есть.
Zak3D[@Tm] (2004-08-13 13:26:00) [16]Так я ненужное хочу вырезать.
-=Iton=- (2004-08-13 01:22:00) [17]Делфю и так глючит,а если еще и урезать ....