- 论坛徽章:
- 0
|
多谢多谢,我大概有概念了。
在这儿再多问个问题吧,虽然已经解决了,但是我感觉我解决的方法不好
如前述,我是在我的程序中embedding Python. 在我原有的程序中,有型如这样的一些命令列表
{
uint cmd_id;
char* strCmdName;
char* strCmdDescription;
uint param_num;
Param_Format paramList*;
}
我本来也有一个自己的脚本解释模块,来根据cmd_name, paramlist进行命令的解析,现在我引进python来替代原有的脚本解释模块。
很自然的,我希望能够做一个python扩展模块, 把这些command都加进去。这样,在我的测试脚本中就可以使用 testmodule.command1(p1,p2,p3); 这样的形式。
问题在这里,这些command个数很多,在我的程序中处理时也不加区别,用统一的方式进行处理,所以我也希望当python回调我的c处理代码时,我也可以使用同一个处理函数来进行这些command的处理,就是说我希望能够这样:
OnPythonCallbackOnMyCommand(....)
{
...
//根据cmd_id 得到该cmd参数个数及类型列表
...
//根据参数列表构造va_list 和 format_string
PyArg_VaParse(args,format_string,va_list);
Mysystem->SendCmd(cmd_id,param_list);
}
基本的python api中,OnPythonCallbackOnMyCommand函数中只有PyObject *self, PyObject *args。 而我需要多传递一个user data: cmd_id
大概就是这么个意思。 关键就是,我要用同一个c函数来对应多个我定义的python函数回调,所以在这个c 函数中,我需要python 解释器除了记录我的callback函数,我的callback类型之外,能够多替我记录一个用户数据,然后再callback时,传递给我。这样我可以知道这个函数被调用是由哪一个python函数引起的。
现在我只能是修改python的源代码来得到这么个额外的user data. 但是我很担心这样做会影响其他模块的装载,因为我修改了这部分接口。 当然我是尽量增加一套我需要的接口,而保留原有的接口。不过仍然不是很完美的解决方法,我想问有人碰到过类似的问题吗? |
|