+ -
当前位置:首页 → 问答吧 → 问个c语言和python相互调用的问题.

问个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();
  }
   
}


问题到底是出在哪儿呢?

作者: wxvp   发布时间: 2010-10-19

能跑表示python的部分完成,没见其它关于画图的初始化部分,光一个draw_t函数没用的吧...

作者: angel_su   发布时间: 2010-10-20