Python не смог загрузить 64-битную DLL на 64-битной Windows - PullRequest
1 голос
/ 22 мая 2019

Я тестирую небольшую программу на Python, которая называется библиотеками DLL.

Моя система - 64-битная Windows 7. Исполняемый файл Python - это тот, который поставляется с 64-битной Anaconda3, запущенной в виртуальной среде Anaconda.

Первое, что привлекло мое внимание, это то, что этот код Python

sys.platform

возвращает win32 даже для AMD64 Arch, "platform.machine ()", похоже, возвращает более точный результат.

Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)] on win32

Я нашел несколько сообщений SO, обсуждающих эту проблему, таких как this .

, а затем программа не удалось загрузить файл DLL:

windll.LoadLibrary(realpath(join(_module_location, 'dlh', 'win64', 'I_cant_tell_you_the_name.dll')))

Сообщение об ошибке:

OSError: [WinError 193] %1 is not a valid Win32 application

Вопрос в том, почему python не может загрузить 64-битную DLL в 64-битной среде? мне показалось, что вместо этого компилятор настоял на загрузке 32-битной DLL. Это почему? Или что созданная Anaconda версия поддерживает только 32-битный код?

К сожалению, у меня не было 32-битной DLL для тестирования, иначе я бы хотел посмотреть, как все прошло.

1 Ответ

0 голосов
/ 22 мая 2019

Вы можете использовать Dependency Walker , чтобы проверить, что происходит. Он имеет функцию профилирования, которая будет отслеживать все загрузки библиотеки.

Несколько возможных проблем:

  1. Python 32-битный, потому что была выполнена неправильная версия
  2. DLL как-то 32-битная
  3. DLL зависит от других DLL, которые не находятся в пути
...