python调用C++DLL

DLL文件的生成与调用

准备c++编辑器(vs2019)和python编辑器(pycharm)

C++生成DLL

创建一个项目,windows桌面向导——应用类程序选择动态链接库dll(空项目)
新建一个dlltest.h和dlltest.cpp

头文件中写入:

python调用C++DLL
主要是声明函数。其中extern "C"表示生成dll时采用c来编译,必须要加,如果不加,生成的dll文件函数名会乱码而导致无法调用。
__declspec(dllexport):要想调用dll中的函数,必须导出相应的函数接口
__DECLSPEC:预处理器定义,在项目属性c/c++中预处理器中添加定义,当有两个宏定义要选择用哪个时使用。这个是简便写法,也可以一步步通过宏定义即可。
python调用C++DLL
_stdcall:Windows API默认函数调用协议,好处是不同的编译器都能调用,因为都是调用的WINAPI。
如果程序中没有可变参数的函数,尽量使用_stdcall协议。(_cdecl通常用于可变参数函数,是c/c++的函数调用协议)

源文件写入

python调用C++DLL
定义函数

最后项目生成一***意这边解决方案配置为debug x64)
此时会在项目文件下就生成了DLL文件,路径:…/x64/Debug/dlltest.dll

Python调用DLL文件

1、创建一个.py文件,将DLL文件复制到.py文件目录下
2、python调用dll要用到ctypes库,所以要安装ctypes库,pip安装即可
3、调用代码
python调用C++DLL
os:os库用来找寻并提供dll文件的路径
WinDLL:导入DLL文件使用WinDLL(路径)/windll.LoadLibrary(路径)
这里导入DLL文件还有另一种方法:CDLL(路径)/cdll.LoadLibrary(路径)
这两种方法的区别与函数的调用协议有关,上文提到的_stdcall和_cdecl,由于c++中使用的是_stdcall,所以我们这里用windll导入DLL文件。
调用函数:有了dll对象就可以直接调用里面的函数了。