-1
私は私のC++プログラムにいくつかのPythonコードを埋め込むとPythonモジュールをインポートし、それへのポインタを取得しようとしていた、私はここで2つのオプションがあります引数:ポインタパラメータ
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;
}
私は、引数としてポインタを渡すと、私はを指すポインタを取得:
しかし、私のポインタ関数の戻り値、私が手:
<module at [some address]>
を
unknownへのポインタがプログラムをクラッシュする間、モジュールへのポインタは正しく動作します。
私の質問は次のとおりです。この仕事をしているのより良い方法があり、ここで動作の違いを引き起こしている何
(ポインタを使うよりは?)?
私は、呼び出し元の関数の値が変更されませんので、それはローカル変数のパラメータ・例では、C++ 11で++標準とのpython2.6
オプション1では、ポインタを参照渡しする必要があります。それ以外の場合は、指定されたポインタに影響を与えないコピーに割り当てます。 –
ああ、私は馬鹿だと感じる – Dino