Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:python:调用c

Python调用C

Something

跨语言调用具体有很多种形式
Python可以调用C/C++
C/C++也可以调用Python
Python调用C++比较常用
具体的实现方式也有很多种

调用步骤(使用ctypes的方式)

加载

Python调用C要使用ctypes
C语言不需要做任何修改
Python使用ctypes库
编译为so/DLL(不需要lib)动态库之后有两种加载方式

ctypes.CDLL('./libmath.so')
libmath=ctypes.cdll.LoadLibrary('./libmath.so')

导出函数

carea=libmath.area

设定参数列表

csum_array.argtypes=(ctypes.POINTER(c_double),ctypes.c_uint)

设定返回值

carea.restype=ctypes.c_double

调用的时候也要特别转换一下

carea(ctypes.c_double(r))

一些基础类型转换

  • c_int:int
  • c_char:char
  • c_char_p:char*(传递字节,最通用)
  • c_uint:unsigned int
  • c_float:float
  • c_double:double

指针的使用(最重要的)

定义一个数组(ctypes.c_int*3)(1,2,3)数组可以直接当指针用
这样的array可以直接变成list来访问
获取变量的指针ctypes.pointer(ctypes.c_double(1.0))
以上只是举个例子,不要这么写,常量的指针没有意义也很危险
就可以传递指针给C语言了
一般来说C语言的部分只做耗时的运算,只传递指针进去
不传递指针回来,也不要在C语言的部分做内存管理
运行C语言写的库,肯定也是需要C语言的基础运行环境的
并不是没有任何依赖,只是说这个依赖基本是个电脑就都有

/var/www/DokuWikiStick/dokuwiki/data/pages/程序/python/调用c.txt · Last modified: 2024/12/10 16:17 by zhonghui