Есть DLL_1, зависящая от DLL_2. Копии каждой длл помещены в каталоги DIR_A и DIR_B. Код Код (Text): LoadLibraryEx("DIR_A\\DLL_1", NULL, LOAD_WITH_ALTERED_SEARCH_PATH); LoadLibraryEx("DIR_B\\DLL_1", NULL, LOAD_WITH_ALTERED_SEARCH_PATH); приводит к загрузке 2-х копий DLL_1 но лишь одной DLL_2 - из DIR_A. Как такой результат согласуется с MSDN: P.S. Сорри, что не в тему. Почему-то могу создать топик в форуме WIN32.
видимо, флаг LOAD_WITH_ALTERED_SEARCH_PATH имеет силу только для длл, которая передаётся параметром функции LoadLibraryEx и не имеет силы к остальным загружаемым каскадно
Как dll1 зависит от dll2? Статически? Если так, то dll2 имеет тот же путь, что и dll2 из другой директории. Соотв. If the path matches the path of an already loaded module, the function just increments the reference count for the module, and returns the module handle for that library. P.S. Если я правильно понял.
dr_dred Зависит статически. Но откуда такой вывод? В DIR_A и в DIR_B есть обе длл. И условие как раз не выполняется.
видимо это из-за того, что в импортах прописано только имя DLL_2, без указания пути. -- Проблема в том, чтобы обеспечить загрузку в один процесс 2-х разных версий одной библиотеки (состоящей из нескольких длл).
есть еще вариант, что dll1 сначала захотела какую-нибудь advapi.dll, которой в DIR_B не оказалось, и далее загрузчик стал искать где попало. таким образом, можно посоветовать разве что намотать себе это на ус, так как спорить с мс(дн) бесполезно
Нужно мнение: предположим собрался я писать hex-редактор/дизассемблер/декомпилятор/что-то подобное, загружающее image-файл как ... image-файл.. Использовать ли LoadLibraryEx (..,0,DONT_RESOLVE_DLL_REFERENCES) или лучше написать свой 'загрузчик? Предполагаемая система линейки NT.
Jupiter Понятно. Ну не сказать чтобы полноценный - просто решил себя попробовать в написании такого проекта