Ошибка при попытке загрузки.dll в Python «Не удалось найти указанный модуль»

#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. Спасибо за быстрый ответ! Я все еще получаю ту же ошибку