ctypes库介绍
Ctypes算是python和C++联合编程中最简单的一种方案,它对环境配置各方面的关联性要求都不高,而且ctypes是独立编程的,与python版本的关联性也不高。
python官网关于ctypes的介绍如下
ctypes is a foreign function library for Python. It provides C compatible data types, and allows calling functions in DLLs or shared libraries. It can be used to wrap these libraries in pure Python.
联合编程应用:与硬件的结合,可能只是调一些底层的接口(访问摄像机),用不了太多的内容,没必要去开发一个扩展库,最简单的方案是编一个动态链接库给python(比如做嵌入式设备,调驱动出现的接口)。还有一些涉及大性能的处理,或者一些算法在C当中实现,然后将接口传到Python
注意:ctypes和Python的交互接口还是相对简单,一些复杂的交互方式还是无法做到,因此算法不能太复杂本教程均是以windows
平台为例编动态库(vs2017),对于linux
和Mac
平台可自行查阅资料。
windows版本ctypes示例
__declspec(dllexport)
我们在windows中编写一个dll动态链接库来供python调用。window里的动态链接库与linux和Mac有所区别,它需要设置\_\_declspec(dllexport)
,在linux和Mac中不需要设置,所以在移植到linux中时可以用一个宏来判断当前操作系统。
REF:__declspec(dllexport)与__declspec(dllimport)
extern "C"
python支持的ctypes函数都是C语言的函数,
C语言函数不支持重载而C++语言的函数支持重载,对C++来说它存到系统的函数名会将函数的参数加进去,使得C与C++的函数名不一致。所以要在C++函数前面加上extern "C"
,这样编译器会将函数编译成C的函数。
dll查找目录
dll库在系统目录或当前执行目录,与python库查找路径sys.path
无关,sys.path
只能影响到python的库和用C++做的扩展库,对dll的查找路径不产生影响。