我尝试编写包含python类的C扩展。你知道吗
这个类将一个文件名作为构造函数的参数fname
,然后将该文件加载到内存并存储为配置文件。你知道吗
以下是我所拥有的:
typedef struct {
PyObject_HEAD
XmlConfig m_cfg;
} PyAgent;
static int PyAgent_init(PyAgent *self, PyObject *args) {
const char *fname;
if (!PyArg_ParseTuple(args, "s", &fname)) {
return NULL;
}
self->m_cfg.Load(fname);
return 0;
}
static PyTypeObject PyAgentType = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"classify.Agent", /* tp_name */
...
}
...
当我尝试加载文件时,出现了分段错误。据我所知,这是因为PyAgent struct
的对象大小由于文件的内存分配而增加。你知道吗
我试过使用PyObject_VAR_HEAD
宏,但没用。你知道吗
你能给出一个线索或类似的例子吗?你知道吗
也许
self->m_cfg
需要先初始化?你在上面调用C++方法,但没有先调用它的构造函数。结构由C代码分配,而不是C++,所以不知道需要构造这个字段。你知道吗有一些方法可以手动调用构造函数(如果我记得正确的话,比如^ {CD2>}),但是最简单的方法可能是有一个字段^ {< CD3>},并且根据需要使用C++操作符的通常语法来分配和释放它。{< CD4>}和^ {< CD5>}(后者被放在^ {CD6>})中。你知道吗
相关问题 更多 >
编程相关推荐