私は少し混乱しています。C++ と Python の統合を試みていますが、簡単ではありません。Boost::Python を正しくコンパイルできなかったため、Boost を使用していません。しかし、それは別の話です。
現在、C ++で行っていることは次のとおりです。
//set everything up
PyObject* py_main_module = PyImport_AddModule("__main__");
PyObject* py_global_dict = PyModule_GetDict(py_main_module);
PyObject* py_local_dict = PyDict_New();
PyObject* py_return_value;
PyRun_SimpleString(data.c_str()); //runs Python code, which defines functions
//call a function defined by the python code
py_return_value = PyRun_String("test()", Py_single_input, py_global_dict, py_local_dict);
//attempt to check the type of the returned value
if(py_return_value != NULL) {
//this is the problem: all of these print 0
cout << PyList_Check(py_return_value) << endl;
cout << PySet_Check(py_return_value) << endl;
cout << PyFloat_Check(py_return_value) << endl;
} else {
cout << "IT WAS NULL?!" << endl;
}
Python プログラム (「data」という名前の文字列として C++ プログラムに入力):
def test():
derp = 1.234
#derp = [1, 2, 3, 4]
#derp = set([1, 2, 3, 4])
return derp
問題は、型チェックが機能していないことです。Python 関数が float、list、または set を返すかどうかに関係なく、それらはすべて 0 を返します。私は何を間違っていますか?
PyRun_String の呼び出しがコンソールに戻り値を出力する理由を誰かが教えてくれればボーナスポイントです。それは本当に迷惑です。