Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > EXE загружает Dll, Dll загружает EXE


Автор: ivan219 10.10.2006, 17:30
Вобщем такое дело:
Есть EXE который экспортирует процедуры и Dll которая эти процедуры импортирует (статическая загрузка EXE) также в Dll есть процедуры которые она экспортирует а EXE их импортирует (динамическая загрузка Dll).

Получается кольцо EXE export->Dll import и Dll export->EXE import так вот сколько обектов EXE и Dll в памяти так как этих Dll уменя будет много и каждая будет загружать свой EXE (статически) получается что уменя будет столькоже EXE+1 сколько Dll в памяти или это не так smile 

Автор: Alexeis 10.10.2006, 19:53
ivan219, Использование exe в качестве dll не документировано, но даже руководствуясь общими приципами можно сказать так. Копия Dll в памяти создается только если были изменены ее внутренние перемненные. До тех пока ни одна из переменных не изменена все пользуются одной общей копией в памяти. Но отображается она для каждого процесса в его адресное пространство. Т.е. логически сколько процессов, столько и копий dll.

Автор: ivan219 11.10.2006, 08:11
Цитата(alexeis1 @  10.10.2006,  19:53 Найти цитируемый пост)
Использование exe в качестве dll не документировано

Главное работает smile 

Цитата(alexeis1 @  10.10.2006,  19:53 Найти цитируемый пост)
но даже руководствуясь общими приципами можно сказать так. Копия Dll в памяти создается только если были изменены ее внутренние перемненные. До тех пока ни одна из переменных не изменена все пользуются одной общей копией в памяти. Но отображается она для каждого процесса в его адресное пространство. Т.е. логически сколько процессов, столько и копий dll.

Чёт не понял smile это что уменя есть EXE который загружает Dll которая загружает EXE т.е. получается что в памяте есть две EXE и одна Dll это дело мня неочень впечатляет smile 




Автор: Romikgy 11.10.2006, 08:54
Цитата(ivan219 @  11.10.2006,  07:11 Найти цитируемый пост)
это что уменя есть EXE который загружает Dll которая загружает EXE т.е. получается что в памяте есть две EXE и одна Dll это дело мня неочень впечатляет

нет , если ты юзаем kernel32.dll то она 2 раз не загружается!
то бишь если dll есть в памяти она не грузится , а твой ехе уже есть в памяти, имхо идет просто обращение к его таблице экспорта

Автор: Yanis 11.10.2006, 17:56
Цитата(alexeis1 @  10.10.2006,  20:53 Найти цитируемый пост)
ivan219, Использование exe в качестве dll не документировано

С чего ты взял, что структура PE файлов недокументирована? В том плане всё впорядке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)