|
Пути-дороги для LoadLibrary/LoadLibraryEx
| ☑ |
0
H A D G E H O G s
09.08.13
✎
16:59
|
Дня доброго.
Ситуация:
Есть программа 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 и идей то нет.
Есть идеи как сделать нежно? Бида ведь.
|
|
1
H A D G E H O G s
09.08.13
✎
17:13
|
Как то тема сгинула...
Ну-ка приподнимем.
|
|
2
H A D G E H O G s
09.08.13
✎
22:13
|
Подниму.
Может ночные обитатели подтянутся.
|
|
3
XLife
09.08.13
✎
22:15
|
в текущей папке файл переименовать... из другой скопировать... подгрузить, поюзать... потом назад))
|
|
4
H A D G E H O G s
09.08.13
✎
22:19
|
(3) Нельзя. Вдруг в текущей папке понадобиться файлег.
Ты, кстати, только что по факту сплайсинг описал, только еще более грубо.
|
|
5
Принт
09.08.13
✎
22:32
|
именовать dll-ки поверсионно
|
|
6
H A D G E H O G s
09.08.13
✎
22:33
|
(5) Нельзя.
|
|
7
Принт
09.08.13
✎
22:35
|
(6) а нужно
|
|
8
H A D G E H O G s
09.08.13
✎
22:36
|
(7) Тогда уж сплайсинг.
|
|
9
Torquader
10.08.13
✎
23:50
|
На самом деле, нужно менять имя dll, так как при загрузке Main.dll из дочерней dll происходит подстановка уже загруженной в память, так как Mail.dll уже была загружена основным процессом.
|
|
10
Бывший адинэсник
11.08.13
✎
01:06
|
(0) конечно есть идеи переименовать старый Calc.dll в Calk.dll и положить в корень, в project.exe в хексе найти обращение к calc и тогось... перебить на calk
|
|