<p>您需要使用Python脚本中的<code>ctypes.addressof</code>,而不是<code>ctypes.byref</code>(这是与C指针不同的对象),然后在<code>yec.c</code>中,将输入值解析为<code>long</code>(如果是32位,则为<code>int</code>),并将其分配给“struct mec*”。在</p>
<p>请参见下面的工作示例:</p>
<pre><code>#include <python2.7/Python.h>
struct mec
{
int age;
int number;
};
static PyObject* nopoint(PyObject* self, PyObject* args)
{
struct mec m;
int n1, n2;
if (!PyArg_ParseTuple(args, "ii", &n1, &n2))
return NULL;
printf("nopoint(c) nombres: %d et %d!\n", n1, n2);
m.age = n1;
m.number = n2;
printf("nopoint(c) age nb: %d et %d!\n", m.age, m.number);
return Py_BuildValue("i", n1 + n2);
}
static PyObject* viapoint(PyObject* self, PyObject* args)
{
struct mec *m;
if (!PyArg_ParseTuple(args, "l", &m))
return NULL;
printf("viapoint av(c) age nb: %d et %d!\n", m->age, m->number);
m->age = 10;
m->number = 1;
printf("viapoint ap(c) age nb: %d et %d!\n", m->age, m->number);
return Py_BuildValue("i", m->age + m->number);
}
static PyMethodDef MyYecMethods[] = {
{"nopoint", nopoint, METH_VARARGS, "Description de fune"},
{"viapoint", viapoint, METH_VARARGS, "Description de fdeux"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
inityec(void)
{
(void) Py_InitModule("yec", MyYecMethods);
}
</code></pre>
<p>在Python中:</p>
^{pr2}$
<p>运行它,我得到:</p>
<pre><code>> python run.py
py mec class 1 2
viapoint av(c) age nb: 1 et 2!
viapoint ap(c) age nb: 10 et 1!
</code></pre>