Как я могу загрузить свою самодельную 32-битную cpp DLL в мой 32-битный Python Canopy 3.5? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь загрузить свой DLL (32-битный) файл, содержащий функции CPP, в python. Он работает на Python 3.7 (32 бита), но выдает ошибку при использовании Canopy 3.5 (32 бита).

код, который я использую для загрузки моей dll:

import os
import ctypes

os.chdir(r"G:\DLLdirectory")
mydll = ctypes.cdll.LoadLibrary('MyDLL.dll')

Если я запускаю его на Python 3.7, он работает, если я запускаю его с Canopy 3.5, я получаю:

Traceback (most recent call last):
    File "DIR/PythonFile.py", line 26, in <module>
        mydll = ctypes.cdll.LoadLibrary('MyDLL.dll')
    File "DIR\Canopy32\edm\envs\User\lib\ctypes\__init__.py", line 425, in LoadLibrary
        return self._dlltype(name)
    File "DIR\Canopy32\edm\envs\User\lib\ctypes\__init__.py", line 347, in __init__
        self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

Если вы измените os.chdir () на sys.path.append () в canopy, модуль все еще не найден, а в python 3.7 я получаю эту ошибку:

Traceback (most recent call last):
    File "DIR/PythonFile.py", line 26, in <module>
        mydll = ctypes.cdll.LoadLibrary('MyDLL.dll')
    File "DIR\Python\Python37-32\lib\ctypes\__init__.py", line 434, in LoadLibrary
        return self._dlltype(name)
    File "DIR\Python37-32\lib\ctypes\__init__.py", line 356, in __init__
        self._handle = _dlopen(self._name, mode)
OSError: [WinError 193] %1 is not a valid Win32 application

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Оказалось, что DLL зависела от другой DLL, и эта DLL была автоматически найдена в python.Однако в Canopy вторую DLL нужно было загружать отдельно.

0 голосов
/ 21 июня 2019

Добро пожаловать в StackOverflow!

Не уверен, является ли это причиной сообщения об ошибке, которое вы видели, но FYI компилятор C ++, используемый при сборке вашего расширения, должен быть тем же, который использовался для сборки Python, который вы используете. Как вы можете сказать, набрав python, Python 3.5.2 для Enthought Visual C++ 2015 (14.0) 1900 Смотри https://stackoverflow.com/a/2676904/1988991

Вероятно, вы создали свою DLL с более поздним компилятором. Поскольку кажется, что он работает с Python 3.7, Visual Studio 2017 или 2019 кажется вероятным. Смотри https://www.scivision.dev/python-windows-visual-c-14-required/

...