#python #c #dll
#python #c #dll
Вопрос:
Я написал код на c и скомпилировал его в dll, и теперь я пытаюсь импортировать его в Python, затем я получаю ошибку «OSError: [WinError 126] Указанный модуль не найден».
Я уже искал решения: в коде я использую некоторые другие библиотеки DLL:
python36.dll
ioterasdk.dll
KERNEL32.dll
итак, я проверил, что все они включены (за исключением KERNEL32.dll это я не знаю, как проверить), и я также добавил «python36.dll «расположение к системным переменным среды.
Код:
from ctypes import *
mydll = cdll.LoadLibrary("D:\full\path\BlueTeraPy.dll")
Я получаю эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:UsersadminAppDataLocalProgramsPythonPython36-32libctypes__init__.py", line 426, in LoadLibrary
return self._dlltype(name)
File "C:UsersadminAppDataLocalProgramsPythonPython36-32libctypes__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found
Я новичок в Stack Overflow и DLL в целом, поэтому, если вам нужна дополнительная информация, пожалуйста, сообщите.
Спасибо
Комментарии:
1. по моему опыту, обычно, когда ваша dll пытается что-то загрузить и терпит неудачу, есть ли у вашей dll зависимости? доступны ли они (на вашем ПУТИ)?
2. Я не уверен, каково определение «зависимостей». Для python36.dll : Я добавил его путь к системным переменным среды, для ioterasdk.dll : Я скопировал его заголовочные, dll- и lib-файлы в ту же папку BlueTeraPy.dll .
3. вы можете использовать procmon для отслеживания того, что пытается сделать ваша dll, и если она выдает ошибки, вы также можете использовать dependency Walker для статического анализа dll и посмотреть, что она захочет загрузить. я использую эти два инструмента именно для этой проблемы
4. В вашей обратной трассировке указано, что вы используете 32-разрядный Python. Вы уверены, что библиотеки DLL, которые вы пытаетесь загрузить, имеют правильную разрядность? 32-разрядный процесс не может загрузить 64-разрядную DLL (и наоборот), и если разрядность не соответствует, вы очень часто будете получать сообщение, что указанный модуль не найден , даже если вы видите его в папке.
5. Я подозревал, что это как-то связано с архитектурой. Мой компьютер 64-разрядный, поэтому вы предлагаете мне загрузить 64-разрядный python?
Ответ №1:
Вы не можете загрузить саму библиотеку, вы должны найти библиотеку в dll.
import ctypes import *
from ctypes.util import *
dll = find_library("D:\full\path\BlueTeraPy.dll")
lib = cdll.LoadLibrary(dll)
Комментарии:
1. Спасибо за быстрый ответ! Я все еще получаю ту же ошибку