如何使用 Python 从预定义的 C++ 函数中获取变量的值?

Posted

技术标签:

【中文标题】如何使用 Python 从预定义的 C++ 函数中获取变量的值?【英文标题】:How to get value of the variable from predefined C++ function using Python? 【发布时间】:2019-04-26 05:58:15 【问题描述】:

有没有办法使用 Python 从预定义的 C++ 函数中获取变量的值?我有 C++ 函数,它以 variant 类型作为参数。但是我们不能在python中定义variant类型变量,对吧?我尝试过使用Boost.Pythonpybind11。但是由于我无法编辑预定义的功能,所以无法实现它们。

编辑: 我有一个名为 bcap 的 C++ 函数,它接受 2 个参数并返回 2 个值。

# C++ code    
# Takes these arguments
int32 func_id
variant[] vntArgs
---
# Returns these values
int32 HRESULT
variant vntRet

variant[] vntArgs有2种变量。

int16 vt
string value

我正在尝试使用这些参数调用此函数。

#python code
    func_id = 3
    vt = 8
    value_1 = 'value: b-CAP'
    value_2 = 'CaoProv.DENSO.VRC'
    value_3 = 'localhost'
    value_4 = ''
    vntArgs = [vt, value_1, vt, value_2, vt, value_3, vt, value_4]

    response = bcap(func_id, vntArgs)

    #store the response in some variables
    result1 = response.HRESULT
    result2 = response.vntRet

问题是当我运行这个程序时,出现了这个错误。

AttributeError: 'int' object has no attribute 'vt'

我该怎么办?

提前致谢。

【问题讨论】:

具体来说,您的variant 类型是什么? 正如我在上面添加的,它是int16 and string 【参考方案1】:

您可以创建多个单独的重载,每个可能的变体组合一个。这行得通吗?

void actual_function(variant<int, double, string> v) 
    // stuff


void your_function(int i) 
    actual_function(i); 

void your_function(double d) 
    actual_function(d);

void your_function(string const& s) 
    actual_function(s); 

【讨论】:

它解决了问题还是缺少任何部分? 感谢您的快速回复。我编辑了原始帖子以使其更易于理解。你能再看看这个吗?谢谢。 你能发布实际的函数签名吗?

以上是关于如何使用 Python 从预定义的 C++ 函数中获取变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

从python调用c++函数

boost-python:如何提供自定义构造函数包装函数?

如何使用 ctypes 将数组从 C++ 函数返回到 Python

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?

如何使用 QT/python 从 Javascript 调用 C++ 函数?

SWIG:将异常从 Python 抛出到 C++