LoadLibraryEx

Тема в разделе "WASM.RESEARCH", создана пользователем green, 13 фев 2006.

  1. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Есть DLL_1, зависящая от DLL_2.

    Копии каждой длл помещены в каталоги DIR_A и DIR_B.



    Код
    Код (Text):
    1.  
    2.     LoadLibraryEx("DIR_A\\DLL_1", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
    3.     LoadLibraryEx("DIR_B\\DLL_1", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
    4.  


    приводит к загрузке 2-х копий DLL_1 но лишь одной DLL_2 - из DIR_A.



    Как такой результат согласуется с

    MSDN:





    P.S. Сорри, что не в тему. Почему-то могу создать топик в форуме WIN32.
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >"Почему-то могу.." , "...что не в тему"

    : )
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    видимо, флаг LOAD_WITH_ALTERED_SEARCH_PATH имеет силу только для длл, которая передаётся параметром функции LoadLibraryEx и не имеет силы к остальным загружаемым каскадно
     
  4. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    shoo

    но как тогда понимать утверждение из МСДН ?
     
  5. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Как 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. Если я правильно понял.
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    dr_dred



    Зависит статически. Но откуда такой вывод?



    В DIR_A и в DIR_B есть обе длл. И условие


    как раз не выполняется.
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    видимо это из-за того, что в импортах прописано только имя DLL_2, без указания пути.



    --

    Проблема в том, чтобы обеспечить загрузку в один процесс 2-х разных версий одной библиотеки (состоящей из нескольких длл).
     
  8. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    есть еще вариант, что dll1 сначала захотела какую-нибудь advapi.dll, которой в DIR_B не оказалось, и далее загрузчик стал искать где попало. таким образом, можно посоветовать разве что намотать себе это на ус, так как спорить с мс(дн) бесполезно
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Нужно мнение:
    предположим собрался я писать hex-редактор/дизассемблер/декомпилятор/что-то подобное, загружающее image-файл как ... image-файл.. Использовать ли LoadLibraryEx (..,0,DONT_RESOLVE_DLL_REFERENCES) или лучше написать свой 'загрузчик? Предполагаемая система линейки NT.
     
  10. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    KeSqueer
    это точно лучше, тем более, если ты пишешь полноценный инструмент.
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Jupiter
    Понятно.
    Ну не сказать чтобы полноценный - просто решил себя попробовать в написании такого проекта ;)