Есть программа project.exe, в каталоге которого есть Main.dll, Calc.dll
Программа валяется в версионных каталогах (прям как 1С :)
C:\Calculate\1.1\
C:\Calculate\1.2\
Программа C:\Calculate\1.2\project.exe использует функции из Main.dll почти сразу по загрузке. Тоесть, он болтаются в ее памяти.
Модуль Calc.dll также юзает функции из Main.dll
Все хорошо.
Но иногда нам надо подгружать модуль Calc.dll из старой версии.
C:\Calculate\1.1\Calc.dll
Он и подгружается. Но он юзает новую версию Main.dll и вываливает ошибку, ибо
LoadLibrary делается не по полному пути, а тупо по имени.
- Такая ситуация не рассмотрена в "DLL-кошмаре"
- Параметр LOAD_WITH_ALTERED_SEARCH_PATH функции LoadLibraryEx при загрузке Calc.dll из старой версии не подходит.
- project.exe.local не подходит.
Вот кроме сплайсинга LoadLibrary/LoadLibraryEx и идей то нет.
Есть идеи как сделать нежно? Бида ведь.
На самом деле, нужно менять имя dll, так как при загрузке Main.dll из дочерней dll происходит подстановка уже загруженной в память, так как Mail.dll уже была загружена основным процессом.
(0) конечно есть идеи переименовать старый Calc.dll в Calk.dll и положить в корень, в project.exe в хексе найти обращение к calc и тогось... перебить на calk
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший