Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Циклические зависимости в DLL


Автор: kvazar 25.10.2004, 21:05
Привет всем!

Есть проблема. Имеется большой проект, состоящий из многих dll файлов(штук 15).
Среди них имеются циклически зависимые друг от друга.

А хочет Б, Б хочет В, В хочет Г, Г хочет А...

Винда98 на это чихает, грузит по одной копии каждой dll. А Win2K грузит аж 8 копий одной из dll!
Нам важно, чтобы каждая dll присутствовала в одном экземпляре. Переструктурировать прожект не хочется. Очень наго древнего лапшового кода. Да и в зависимостях ли дело? Мы используем CBuilder++ 6.0 + DELPHI.

Хельп!



Автор: mr.DUDA 26.10.2004, 07:26
Задачка решается ну очень просто: в функции DllMain нужно проверять (уж каким способом - решайте сами, можно через события или расшаренную переменную, наконец), загружена ли уже такая длл. Если да - то выполнять (прямо из длл !) FreeLibrary с хэндлом этой длл-ки.

З.Ы. я только не уверен, будет ли после этого работать хотя бы одна экпортируемая функция в вызывающем модуле...

Автор: Mad 26.10.2004, 12:44
Помоему это связанно с компилятором.
Точно также делал на VC++, и все нормально было (по одной копии).

Автор: kvazar 27.10.2004, 09:50
Проблему решили перейдя на динамическую подгрузку dll.

handle = GetModuleHandle("blablabla");
if(handle == NULL) handle = LoadLibrary("blablabla");

...

proc = GetProcAddress(handle, "doTuplo");

и т.д.

Геморно было переделывать, ну да ладно.

Всем спасибо

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