怎么解决python导入dll报错windowserror:126, 不是路径的问题 50
API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
API-MS-WIN-CORE-PRIVATEPROFILE-L1-1-1.DLL
API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL
EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
但我用VS2015又可以正常load和调用该dll,想不明白问题在哪 展开
解决办法:
加载的时候要根据你将要调用的函数是符合什么调用约定的。 windll和cdll分别是WinDLL类和CDll类的对象。
stdcall调用约定:
Objdll = ctypes.windll.LoadLibrary("dllpath")
Objdll = ctypes.WinDLL("dllpath")
cdecl调用约定:
Objdll = ctypes.cdll.LoadLibrary("dllpath")
Objdll = ctypes.CDLL("dllpath")
调用后就可以使用dll中的函数
print Objdll.Add(1, 102)
Objdll = ctypes.cdll.LoadLibrary("D:\\dll\\PosterDetector.dll")
扩展资料:
python导入dll报错展示:
使用python调用C++的dll报错,错误如下:
Traceback (most recent call last):File "E:/work/proc/video_web/application.py", line 157, in <module>
Objdll = ctypes.cdll.LoadLibrary(os.path.join(APP_ROOT,"dll","PosterDetector.dll"))
File "d:\python27\Lib\ctypes\__init__.py", line 444, in LoadLibrary
return self._dlltype(name)
File "d:\python27\Lib\ctypes\__init__.py", line 366, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126]
在 Python 里面使用 ctypes 载入 dll 时,如果这个 dll 还依赖于其它的 dll 的话,这些相关的 dll 也得要能被 Python 的进程访问到。如果访问不到就会报以下错误:
[python] view plain copy print?
import sys
sys.path.append('.')
import ctypes
dll=ctypes.cdll.LoadLibrary('dll2python.dll')
Traceback (most recent call last):
return self._dlltype(name)
File "C:\Python27\lib\ctypes\__init__.py", line 365, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126]
在使用简单的谷歌搜索大法之后,得知:
导致这样的问题有两个最主要的原因
1
系统无法定位到你的DLL 动态库
2
你的DLL 动态库依赖于其他其他DLL 动态库无法被系统找到。
问题一很好解决, 在导入动态链接时,直接加入地址链接:
[python] view plain copy print?
dll=ctypes.cdll.LoadLibrary('E://code text/python/dll2python/python call/dll2python.dll')
基本上问题就解决了
有一点让笔者不解的是,笔者已经导入了当前路径
[python] view plain copy print?
import sys
sys.path.append('.')
系统竟然都找不到,还需要使用绝对路径才能被检索到。 有知道原因的同学请解释一下。
对于问题二, 最基本的解决方式是把相关的DLL 动态库也导进来,这样问题基本就能解决。
对于无法解决的同学,引起这类问题的主要原