当我将一些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结合使用
在参数示例中,它是一个局部变量,因此调用函数中的值不会更改。你知道吗
如果你做了一个参数示例,取一个指向指针的指针,并相应地修复其余部分,那么调用函数的值就会改变,它就会工作。你知道吗
相关问题 更多 >
编程相关推荐