您的位置:首页 > 编程语言 > Python开发

VC与Python交互(三)(自定义Python模块/函数)

2010-09-15 15:07 369 查看
1 首先定义一个函数,其中PyArg_ParseTuple来获得参数,si表示第一个是string,第二个是int

extern "C" static PyObject* SendStringInt(PyObject *pSelf, PyObject *pParams)
{
char* strMessage = 0;
int nCount;
if(!PyArg_ParseTuple(pParams, "si", &strMessage, &nCount))
{
QDLogs.SendMsg(LOG_OUTPUT_ERROR_TEAM, "uable to parse parameter tuple");
return 0;
}
QDLogs.SendMsg(LOG_OUTPUT_ERROR_TEAM, strMessage);
return (PyObject*)Py_None;
}


2 做一个方法表,为自定义模块做准备,数组最后一个值要全为NULL

extern "C" PyMethodDef QDMethods [] =
{
{"sendStringInt", SendStringInt, METH_VARARGS, "SendStringInt" },
{NULL, NULL, NULL, NULL}
};


3 注册模块

void QdaoPythonManager::AddPythonModule(char* szModuleName, PyMethodDef* pDef)
{
class PyThreadStateLock PyThreadLock;
if(!PyImport_AddModule(szModuleName))
{
QDLogs.SendMsg(LOG_OUTPUT_ERROR_TEAM, "%s module could not be created", szModuleName);
return;
}
// 将函数表加入这个模块
if(!Py_InitModule(szModuleName, pDef))
{
QDLogs.SendMsg(LOG_OUTPUT_ERROR_TEAM, "%s API module could not be initialized", szModuleName);
return;
}
return;
}
QdaoPythonManager::Instance().AddPythonModule("QD", QDMethods);


4 这样就可以在Python中调用了,在C中快速执行Python可以:

PyRun_SimpleString("import QD;QD.sendStringInt('哈哈', 1)");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: