Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将元组从Python 3.6传递到C++;_C++_Python 3.x - Fatal编程技术网

C++ 如何将元组从Python 3.6传递到C++;

C++ 如何将元组从Python 3.6传递到C++;,c++,python-3.x,C++,Python 3.x,全嵌入式Python和C++的小问题。问题是我有一个Python代码,它将返回一个元组,在本例中,该语句是: def test(): x = 1; y=2; c=3; d=4; return [x,y,c,d] 在C++中,我以以下方式嵌入了代码: pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) { printf("Result of cal

全嵌入式
Python
C++
的小问题。问题是我有一个
Python
代码,它将返回一个元组,在本例中,该语句是:

def test():
   x = 1;
   y=2;
   c=3;
   d=4;
   return [x,y,c,d]
C++
中,我以以下方式嵌入了代码:

pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL)
{
    printf("Result of call: %d\n", PyTuple_GetItem(pArgs, i, pValue));
}
出于某些原因,打印输出如下所示:

通话结果:
1846660304

还尝试返回字符串,这也不起作用。只有一个有效的方法是返回,例如返回h和在
C++
中使用
PyTuple\u GetItem
,而不是使用
PyLong\u AsLong()

有人能告诉我如何读取返回值到
C++
的正确方向吗?我对
Python
相当陌生,不幸的是
Python
文档水平很差,至少在这种情况下没有代码示例或任何东西。

元组由(1,2,3,4)包围,而不是括号。尝试更改Py代码中的元组,然后重新运行代码。

您有四个问题:

  • 函数返回的是
    列表
    ,而不是
    元组
    。使用
    PyTuple\u GetItem
    是不合适的;及
  • PyTuple\u GetItem
    不需要三个参数,只需要两个;及
  • 由于在任何情况下都无法确定返回类型,因此最好使用
    PyObject_GetItem
    ;及
  • 最重要的是,你看错了对象
也就是说,您正在使用
PyTuple\u GetItem(pArgs,i,pValue)
,它将尝试在
pArgs
中查找。您可能需要访问什么
pValue

PyObject_GetItem(pValue, i)

这是一个列表,不是元组。我猜<>代码> PytuPrPulgGestEng/<代码>返回变量的内存地址,而不是它的实际值。是的,但是如何真正处理C++中的AKA如何提取数据?或者换句话说,从Python脚本传递多个参数到C++的最佳方法是什么?如何提取数据?应该用更严格的警告编译,当您尝试使用<代码> %D/<代码>格式打印指针时,您会出错。是的,我真的不知道该怎么办,怎么办?“使用更严格的警告进行编译”(使用visual studio 2017)。无论如何,我将代码更改为def test():x=1;y=2;c=3;d=4;return(x,y,c,d)嗨,我按照您的建议进行了尝试,结果是整个可执行文件崩溃:(即时调试器使用printf在该行显示uncaught异常。我也尝试了PyObject_GetItem(pValue,0),但结果相同……此外,
PyObject_GetItem
将为您提供另一个
PyObject*
(表示整数)它不能像C整数那样传递给<代码> PROTFF <代码>。HMM OK我理解;如何正确地传递给Prtff。底线是我只需要从Python得到返回值到C++中的变量,我只是不知道如何做它。Python文档中没有代码示例是没有多大用处的。我真的不知道,但是Jeronimo你说在docs.python.org/3/extensing/extensing.html页面上有一个关于如何对字符串执行相同操作的示例。我读了两遍,都找不到你指的是哪个示例?