注意: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
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"))