VC与Python交互(三)(自定义Python模块/函数)
2010-09-15 15:07
369 查看
1 首先定义一个函数,其中PyArg_ParseTuple来获得参数,si表示第一个是string,第二个是int
2 做一个方法表,为自定义模块做准备,数组最后一个值要全为NULL
3 注册模块
4 这样就可以在Python中调用了,在C中快速执行Python可以:
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)");
相关文章推荐
- python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
- 自定义python startup脚本使交互解释器支持tab和删除键
- python3+PyQt5 图形项的自定义和交互--实现page Designer应用程序
- PyCon 2011 - Hidden Treasures of the Python Standard Library - 自定义交互模式表达式计数器
- VC与Python交互(一)(静态编译Python的方法)
- VC与Python交互(二)(Pythoncore嵌入解决import site出错的问题)
- VC与Python交互(四)(C执行Python文件)
- VC与Python交互
- VC与Python交互
- 在python中实现自定义配置文件解析及应用技巧[yaml and ConfigParser] 推荐
- Python自定义线程池实现方法分析
- VC++中添加响应自定义消息
- (转)python爬虫----(scrapy框架提高(1),自定义Request爬取)
- 【再回首Python之美】【函数】自定义函数
- VC嵌入python时debug版lib下载
- vc中处理python传回来的字符串数据
- vc 自定义菜单编程
- 用VC++创建自定义向导程序
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
- python------ipython交互工具