Python调用C、C++库
sf2gis@163.com
2014年9月24日
1 目标:Python调用C/C++中的类或方法
ctypes是Python扩展库,自2.5以后开始加入Python。
Ctypes提供了C/C++与Python之间交互的映射关系,将库映射为一个对象。
用于调用C/C++库。
2 原理
python使用c api dlopen库打开dll。
3 方法:ctypes,sip,pycxx
ctypes在python内部调用c/C++库,因为是C接口,需要将C++的类转换为C的函数。
sip:将库全部转换为python库。为pyqt开发,较少使用。
pycXX:将库全部转换为python库。专为CXX开发。
3.1 导入库
CTypes可以加载库,并将库按照不同的类型导出为对象。共有cdll(cdecl),windll(stdcall),oledll(stdcall,返回HResult错误码)三种类型。
3.2 类型映射
None == C中的NULL
integers,longs == int
byte string、unicode string== char */wchar_t *
以上类型可以直接用于函数的参数。
但是函数的返回值应该使用明确的ctypes类型。
使用.value来返回其实际值。
动态内存使用create_string_buffer/create_unicode