Вопрос по ctypes, windows, dll, python – WindowsError: [Ошибка 126] при загрузке DLL с ctypes
Это прекрасно работает на Windows 7 с Python 2.7:
<code>lib = ctypes.cdll.LoadLibrary('prov_means') provmeans = lib.provmeans </code>
Библиотека prov_means.DLL находится в моем рабочем каталоге. Он экспортирует простую, автономную функцию C provmeans () без каких-либо зависимостей.
Когда я пытаюсь сделать то же самое на Windows XP и Python 2.7, я получаю
<code>Traceback (most recent call last): File "D:\python\Auxil\src\auxil.py", line 130, in <module> lib = ctypes.cdll.LoadLibrary('prov_means') File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126] The specified module could not be found </code>
Я попытался скопировать DLL в Windows \ System32, а также ввести полный путь
<code>"d:\\python\\auxil\\src\\prov_means" </code>
с и без & quot; .DLL & quot; расширение. Ничего не работает
что вы получаете, когда не удается найти зависимую DLL. Для этого есть две очевидные причины:
Your DLL is not being located. Your DLL depends on other DLLs that cannot be found.Я сомневаюсь, что вариант 1 является проблемой, но в любом случае я думаю, что я, вероятно, буду использовать полный путь к этой DLL, чтобы быть уверенным.
Таким образом, остается вариант 2, и наиболее распространенной причиной этого является то, что на вашей целевой машине не установлена среда выполнения C ++. Либо установите среду выполнения C ++ на целевой машине, либо используйте статическое связывание,/MT
, при создании вашей DLL, чтобы вам не нужно было перераспределять среду выполнения.
Вероятно, на компьютере, на котором вы разработали DLL, вы установили компилятор C ++, который установил для вас среду выполнения. На вашей целевой машине, где код не работает, вы не установили компилятор, и поэтому среда выполнения отсутствует.