Я включаю python.h
в моем Visual C++ проект файла DLL, который вызывает неявное соединение с python25.dll
. Однако я хочу загрузить определенное python25.dll
(несколько могут присутствовать на компьютере), таким образом, я создал очень простой файл манифеста, названный test.manifest:
И я объединяю его с автоматически встроенным файлом манифеста, сгенерированным Visual Studio благодаря:
Configuration Properties -> Manifest Tool -> Input and Output -> Additional Manifest Files
-->$(ProjectDir)\src\test.manifest
python25.dll
теперь загружается дважды: тот, который требует декларация и та, которую Windows должен найти через его поисковый порядок.
Снимок экрана проводника процесса http://dl.dropbox.com/u/3545118/python25_dll.png
Почему это происходит и как я могу просто загрузить файл DLL, на который указывает декларация?
Я добился некоторого прогресса в понимании вопроса.
Сначала позвольте мне уточнить сценарий:
Python25.dll
в той же папке, что и мой файл DLL, а также Boost_Python-VC90-MT-1_39.DLL
. Затем при запуске файла EXE текущий каталог не является ни одним, содержащим Python25.dll
, и именно поэтому порядок поиска используется и некоторые другие Python25.dll
быть найденным до моего.
Теперь я выяснил, что метод манифеста был хорошим подходом: мне удалось перенаправить нагрузку на «мою» Python25.dll
.
Проблема в том, что это усиление BOOST DLL BOOST_PYTHON-VC90-MT-1_39.DLL
, отвечающих за «двойную» загрузку!
Если я не загружу этому, то Python25.dll
правильно перенаправлен. Теперь я как-то должен выяснить, как сказать Boost DLL-файл не загружать другого Python25.dll
...
Зависимость Уолкер обычно является лучшим инструментом для разрешения этой проблемы. Я не слишком уверен, насколько хорошо он обрабатывает манифель, хотя ...
Где в этом запутанном беспорядке находится фактический файл исполняемого процесса?
Две возможности приходят на ум:
Вы пишете файл DLL Python Отказ Таким образом, процесс Python загружает ваш файл DLL, и его будет , уже есть собственная зависимость Python25.dll.
Файл EXE загрузка файла DLL встроен с файлами заголовков и библиотеками, предоставленными файловым проектом DLL. Так что он наследует комментарий #pragma (lib, "python25.lib")
из файла заголовка и в результате загружается сам файл DLL.
Моя проблема со вторым сценарием, я ожидаю, что файл EXE и файл DLL, чтобы быть в той же папке в том случае, если файл EXE неявно загружает ваш файл DLL. В этом случае файл EXE, ваш файл DLL и Python25.dll уже входит в той же папке. Почему тогда версия System32 когда-либо загружается? Порядок поиска для неявно загруженных файлов DLL всегда находится в папке файла приложения EXE.
Таким образом, фактический интересный вопрос неявным в вашем запросе: как система System32 Python26.dll вообще загружен?