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),对于linuxMac平台可自行查阅资料。

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的查找路径不产生影响。

© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-05-22

results matching ""

    No results matching ""