C++调用python过程笔记

此文是学习笔记,供日后翻阅。
下面列出C++访问python所需的函数,按调用的先后次序排列。
提示: 其中实例化类的方法是python3中的,若要使用python2,则用PyInstance_New这个方法。有关此方法网上有很多资料,就不列出了。

//PyInitialize: 必须首先调用,初始化python运行所需模块。它无参数、无返回值
void Py_Initialize();

/*Py_IsInitialized: 检查初始化是否成功
返回值: 成功返回true/
bool Py_IsInitialized();

/*PyImport_ImportModule: 加载python模块
*szModuleName: 模块名称
返回值: 成功加载返回模块指针/
PyObject *PyImport_ImportModule(const char *szModuleName);

/*PyModule_GetDict: 获取模块字典
*pModule: 模块指针
返回值: 成功从指定模块获取字典返回字典指针/
PyObject *PyModule_GetDict(PyObject *pModule);

/*PyDict_GetItemString: 从模块字典中获取指定的对象
*pDict: 被查找的模块字典指针
*key: 要查找的模块中的函数或类名
返回值: 若找到指定的对象,返回指向它的指针;否则返回NULL/
PyObject *PyDict_GetItemString(PyObject *pDict, const char *key);

/*PyInstanceMethod_New: 实例化从模块字典中查找到的类
*pClass: 从模块字典中找到的类信息指针
返回值: 根据类信息指针构造该类的实例,并返回它的指针/
PyObject *PyInstanceMethod_New(PyObject *pClass);

/*PyObject_CallMethod: 调用类方法
*pInstance: 由PyInstanceMethod_New返回的类实例
*pMethodName: 被调用的类方法名
*pFormat: 传递给类方法的参数类型格式字符串
*…: 传给类方法的参数
返回值: 被调用类方法的返回值。若被调用方法无返回值,则本方法返回NULL/
PyObject *PyObject_CallMethod(PyObject *pInstance, const char *pMethodName, const char *pFormat, …);

/*PyObject_CallFunction: 调用模块中的函数
*pFunction: 从模块字典中获取的模块函数指针
*pFormat: 要传给模块函数的参数类型格式化字符串
*…: 传给模块函数的参数列表
返回值: 模块函数的返回值;若模块函数无返回值,该方法返回NULL/
PyObject *PyObject_CallFunction(PyObject *pFunction, const char *pFormat, …);

/*PyArg_Parse: 从python返回的数据对象中获取指定的数据
*pArgs: 调用python方法得到的返回值
*pFormat: 指定获取什么类型数据的格式化字符串
…: 存储获取数据的指针/
PyArg_Parse(PyObject *pArgs, const char *pFormat, …);

//下面这个宏释放python api创建的对象,如模块,模块字典,函数,类和类实例等等
Py_DECREF(pObject);

//最后调用此方法释放python模块
Py_Finalize();

原文链接:https://blog.csdn.net/love_clc/article/details/76653100

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章