Я достиг некоторого прогресса в понимании проблемы.
Сначала позвольте мне прояснить сценарий:
- Я создаю файл DLL, который встраивает и расширяет Python, используя Python C API и Boost.Python.
- Таким образом, я предоставляю
python25.dll
в той же папке, что и мой файл DLL, а также boost_python-vc90-mt-1_39.dll
.
- Тогда у меня есть EXE-файл, который является демонстрацией, показывающей, как создать ссылку на мой DLL-файл: этот EXE-файл не обязательно должен находиться в той же папке, что и мой DLL-файл, если файл DLL можно найти в ПУТИ (я предполагаю, что конечный пользователь может или не может поместить его в одну и ту же папку).
Затем при запуске EXE-файла текущим каталогом не является python25.dll
, и поэтому используется порядок поиска, а некоторые другие python25.dll
могут быть найдены до моего.
Теперь я понял, что техника манифеста - это хороший подход: мне удалось перенаправить загрузку на «мой» python25.dll
.
Проблема в том, что это Boost DLL-файл boost_python-vc90-mt-1_39.dll
, который отвечает за "двойную" загрузку!
Если я не загружу этот файл, python25.dll
будет правильно перенаправлен. Теперь мне нужно как-то выяснить, как сказать файлу Boost DLL не загружать другой python25.dll
...