python和c学习-学习 Python与C相互调用

缘由

稀里糊涂的,用 Python 或用 C++ Qt都能写点小程序出来。然后对Python + Qt开始有点兴趣:想学PyQt4,想了解PythonQt,也期待PySide的Windows版本。但总觉得这三个东西都蛮神秘的,看看资料也总是似懂非懂

怎么办呢?还是从基础开始吧:应该是就是 Python 与 C 的相互调用了(先找找资料,整理一下思路)

Python 与 C

Python 与 C 的相互交互方式可看成有两种:

扩展:从 Python 中调用 C

嵌入:从 C 中调用 Python

120223210429321.jpg

python manual

其他:

Programming Python 第22章、第23章

Python C API 使用心得

Python与C之间的相互调用(Python C API及Python ctypes库)

Python 调用 C 模块

用 Python 来调用 C 模块,即:用 C 来扩展 Python。

需要写C代码

编译成动态库

比如 我们编写一个 C 函数

void abcd()

{

}

然后将其编译成 abcd.dll

但要使得 C 能被 Python 调用,仅这样还不行,我们写的C的代码需要遵循某种规则,只有这样,Python才能识别这个模块

比如:我们想用下面的代码来调用 上面的函数:

import abcd

abcd.abcd()

首先,需要 abcd 这个模块,.dll不行,不过将其改成.pyd 后python就理会它了

然后,python 将从 .pyd 中调用 initabcd() 来完成模块的初始化

也就是说,我们需要一个函数

PyMODINIT_FUNC initabcd();

该初始化函数将告诉Python它有哪些函数,这是通过一个结构数组来实现的

static struct PyMethodDef anyname[]={}

我们需要将我们前面的函数信息添加到该结构数组中,然后在前面的init函数中将该数组注册,但是,一开始的函数还是不能直接用,我们需要

static PyObject * wrap(PyObject * self, PyObject * args)

Python 要求这样用这样的函数。这样一来,就理通了:

编写我们自己的函数 abcd

编写符合python要求的 wrap 来调用 abcd

将 wrap 函数的信息以及我们想要的名字 "abcd" 放入结构数组

在 init 函数中将该 结构数组进行注册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值