python函数指针_通过Ctypes将C转换为Python – 将函数指针的结构包含到静态函数中...

我在C库中的结构是这样的.

DataFn中的函数指针指向静态函数.

.H

struct Data {

int i;

int *array;

};

typedef struct {

bool (* const fn1) (struct Data*, const char *source);

....

} DataFn;

extern DataFn const DATAFUNC

使用objdump,该表仅包含DATAFUNC和gcc中的一些其他内容.

这在C中很好,其中调用fn1就像DATAFUNC.fn1(…,…),但是这样的东西怎么会被包裹起来所以fn1可以用python w / ctypes调用?

示例python

libc = ctypes.cdll.LoadLibrary("./data.so")

print(libc.DATAFUNC)

结果是

< _FuncPtr对象位于0x6ffffcd7430>

解决方法:

我相信缺少的主要部分是ctypes类型的in_dll方法(访问从dll部分导出的值).

除此之外,为了使用C数据,您需要让Python知道数据格式.这适用于:

>结构.通过继承ctypes.Structure来定义Python对应物

>函数指针(适用于您的情况).使用ctypes.CFUNCTYPE定义它们

我准备了一个简化的例子,说明了上述内容.请注意,我没有做任何错误处理(检查NULL(你应该)),以保持简单.

c.h:

struct Data {

int i;<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值