怎么解决python导入dll报错windowserror:126, 不是路径的问题

Python016

怎么解决python导入dll报错windowserror:126, 不是路径的问题,第1张

解决办法:

加载的时候要根据你将要调用的函数是符合什么调用约定的。 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 调用dll 报错 WindowsError: [Error 126]

在函数声明加入前缀,如

__declspec(dllexport) int Fun(int a, int b)

否则在加载该dll时会提示找不到该符号

在windows下可以通过vs自带的dumpbin工具查看可被调用符号

dumpbin /exports test.dll

C函数在调用过程中关于参数传递和压栈由多种规定,作为dll提供给其他程序调用时,必须明确并统一为同一种调用规定,否则会导致栈破坏,编译器负责具体实现调用规定,主要有以下几种调用规定

python下调用C库有多种方式,ctypes是其中一种比较方便的,调用时首先需要加载dll文件,根据C dll的调用规定不同需要使用不同接口,使用ctypes需要 import ctypes 库

对于简单的C函数,例如 int add(int a, int b) , 此时就可以直接调用了,如

对于较复杂的C函数的参数情况,ctypes调用时对入参和出餐做一定处理,这里分情况讨论

以上包含了几种主要的参数传递情况,ctypes也提供了一个较为完整的python类型和C类型的对照,如下: