当我将一些python代码嵌入到我的C ++程序中并尝试导入python模块并获取指向它的指针时,我有两个选择:
传递空指针作为参数:
void importPyModule(PyObject * modPtr, const char *modName){
modPtr = PyImport_ImportModule(modName);
if(modPtr == nullptr){
std::cout << "python module: " << modName << " import failed\npython message: ";
PyErr_Print();
std::exit(1);
}
}
或者返回一个指针:
PyObject *importPyModule(const char *modName){
PyObject *modPtr = PyImport_ImportModule(modName);
if(modPtr == nullptr){
std::cout << "python module: " << modName << " import failed\npython message: ";
PyErr_Print();
std::exit(1);
}
}
为了完整性,这就是我调用我的功能的地方:
#include "Python.h"
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <iomanip>
int main(){
initPython(); // initialize the interpreter and set appropriate paths
PyObject *aws_tools, *boto, *imp, *sdb;
// Option 1: return pointer
aws_tools = importPyModule("aws_tools");
// Or option 2: pass a pointer
importPyModule(aws_tools, "aws_tools");
/* Some other code */
return 0;
}
当我将指针作为参数传递时,我得到一个指向:
的指针<unknown at [some address]>
但是当我指针从函数返回一个值时,我得到:
<module at [some address]>
指向模块的指针将正常工作,而指向未知的指针将使程序崩溃。
我的问题是:有没有更好的方法来完成这项工作(比使用指针?)
造成这种行为差异的原因是什么?
我正在使用g ++与c ++ 11标准和python2.6
答案 0 :(得分:0)
在您的参数示例中,它是一个局部变量,因此调用函数中的值不会发生变化。
如果您使用参数示例获取指向指针并相应地修复其余部分,那么调用函数的值将会被更改,并且它将起作用。