问个c语言和python相互调用的问题.
时间:2010-10-19
来源:互联网
我有一个dx画多边形函数,单独执行是一点问题也没有,我把它做成python模块后,再调用就出问题了.但参数传递正确,编译也无问题.就是好像没有执行一样.
//这是画多边型函数
int draw_t(POLYGON2D_PTR poly,int c_x,int c_y,DWORD color,VERTEX2DF_PTR vlist)
{
poly->state = 1;
poly->num_verts = 3;
poly->x0 = c_x;
poly->y0 = c_y;
poly->xv = 0;
poly->yv = 0;
poly->color = color;
poly->vlist = vlist;
DDraw_Lock_Back_Surface();
if (Draw_Polygon2D16(poly, back_buffer, back_lpitch))
{//这里是测试Draw_Polygon2D16有没有执行,python调用后显示确实是做了的
Open_Error_File("errors2.log");
Write_Error("draw_t内 %d ,%d",poly->x0,poly->y0);
Close_Error_File();
}else return 0;
DDraw_Unlock_Back_Surface();
return 1;
}
static PyObject * py_draw_t (PyObject* self,PyObject *pParams)//这些参数是必须的
{//这个函数是被python调用的
int cx;
int cy;
if ( ! PyArg_ParseTuple( pParams,"ii",&cx,&cy))
{
Open_Error_File("PyArg_ParseTuple.log");
Write_Error("PyArg_ParseTuple 出错");
Close_Error_File();
};
//调用画三角型函数,这里调用draw_t 不报错,但也不显示,cx,cy的值也正常
draw_t(&xxx,cx,cy,RGB16Bit565(0, 255, 0),asteroid_vertices);
Py_RETURN_NONE;
}
static PyMethodDef draw_API_FUN[] =
{ //第一个是python中用,第二个是c函数指针要转换为PyCFunction类型
//第3个是模式类型,第4个是函数简介字符串,可为空
{"py_draw_t", (PyCFunction)py_draw_t, METH_VARARGS, NULL},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC init_draw_api() {
Py_InitModule3("draw_api", draw_API_FUN, "My first extension module.");
}
//用这个来调用python脚本.
void get_pFunc(char *pyscriptName)
{
PyObject * pName = PyString_FromString(pyscriptName);
PyObject * pModule = PyImport_Import(pName);
if ( ! pModule )
{
Open_Error_File("pModule.log");
Write_Error("pModule 出错");
Close_Error_File();
}
}
问题到底是出在哪儿呢?
//这是画多边型函数
int draw_t(POLYGON2D_PTR poly,int c_x,int c_y,DWORD color,VERTEX2DF_PTR vlist)
{
poly->state = 1;
poly->num_verts = 3;
poly->x0 = c_x;
poly->y0 = c_y;
poly->xv = 0;
poly->yv = 0;
poly->color = color;
poly->vlist = vlist;
DDraw_Lock_Back_Surface();
if (Draw_Polygon2D16(poly, back_buffer, back_lpitch))
{//这里是测试Draw_Polygon2D16有没有执行,python调用后显示确实是做了的
Open_Error_File("errors2.log");
Write_Error("draw_t内 %d ,%d",poly->x0,poly->y0);
Close_Error_File();
}else return 0;
DDraw_Unlock_Back_Surface();
return 1;
}
static PyObject * py_draw_t (PyObject* self,PyObject *pParams)//这些参数是必须的
{//这个函数是被python调用的
int cx;
int cy;
if ( ! PyArg_ParseTuple( pParams,"ii",&cx,&cy))
{
Open_Error_File("PyArg_ParseTuple.log");
Write_Error("PyArg_ParseTuple 出错");
Close_Error_File();
};
//调用画三角型函数,这里调用draw_t 不报错,但也不显示,cx,cy的值也正常
draw_t(&xxx,cx,cy,RGB16Bit565(0, 255, 0),asteroid_vertices);
Py_RETURN_NONE;
}
static PyMethodDef draw_API_FUN[] =
{ //第一个是python中用,第二个是c函数指针要转换为PyCFunction类型
//第3个是模式类型,第4个是函数简介字符串,可为空
{"py_draw_t", (PyCFunction)py_draw_t, METH_VARARGS, NULL},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC init_draw_api() {
Py_InitModule3("draw_api", draw_API_FUN, "My first extension module.");
}
//用这个来调用python脚本.
void get_pFunc(char *pyscriptName)
{
PyObject * pName = PyString_FromString(pyscriptName);
PyObject * pModule = PyImport_Import(pName);
if ( ! pModule )
{
Open_Error_File("pModule.log");
Write_Error("pModule 出错");
Close_Error_File();
}
}
问题到底是出在哪儿呢?
作者: wxvp 发布时间: 2010-10-19
能跑表示python的部分完成,没见其它关于画图的初始化部分,光一个draw_t函数没用的吧...
作者: angel_su 发布时间: 2010-10-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28