C到Python接口-尝试传递结构



我目前正在开发C和Python之间的接口,发现了一个无法解决的问题:我想将结构传递给Python。听起来很简单,但不知怎么的,我一直有SegFault。我已经准备好了一切,以便返回的对象可以从Python中使用。如果我在Python中创建它的实例,它运行得很好,但当它从函数返回时,我无法使用它。这是相应的代码:

typedef struct{
    PyObject_HEAD
    op *grid;
    double beta, *umatrix, *energies, weight;
    int nflavours, opCount;
} SegmentTrace;

typedef struct{
    PyObject_HEAD
    double ratio;
} SegInsert;

static PyObject *segTr_insert(SegmentTrace *self, PyObject *args)
{
    SegInsert *res = (SegInsert*)malloc(sizeof(SegInsert));
    return Py_BuildValue("O", (PyObject*)res);
}

有了这些定义(以及相应的类型定义),我可以做到以下几点:

import cs
obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_2 = cs.segInsert()
print obj_2.ratio

但不是:

import cs
obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = obj_1.insert()
print obj_3.ratio

出于某种原因,SegFault突然出现了——有人知道为什么吗?

谢谢,卢卡斯。

好吧,我想好了——至少有一个变通方法可以解决这个问题。无论如何,只是为了完整性:可以将Python中自己创建的Python-C对象传递给一些C例程,并在那里使用数据。也就是说,代替

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = obj_1.insert()

用途:

obj_1 = cs.segmentTrace(0., mat_a, mat_b)
obj_3 = cs.segInsert(obj)

效果不错;)L.

相关内容

  • 没有找到相关文章

最新更新