python 调用dll 报错 WindowsError: [Error 126]

版权声明:本文为博主原创文章,转载请 注上 http://blog.csdn.net/wzhwei1987 https://blog.csdn.net/wzhwei1987/article/details/83503005

调用代码

注意:C++文件(cpp):(在函数声明上加上extern "C" 的修饰)否则方法名不会被python识别

加载的时候要根据你将要调用的函数是符合什么调用约定的。 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调用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] 

解决

原因是PosterDetector.dll还依赖其他的dll,

单纯将这两个dll文件放在同一目录下是没有作用的,因为Python进程起始路径并不是 PosterDetector.dll的目录;

解决:
将其他的dll和当前的PosterDetector.dll放在一个文件夹,并加上代码:
os.chdir(D:\\dll"))

猜你喜欢

转载自blog.csdn.net/wzhwei1987/article/details/83503005
126
今日推荐