gpt4 book ai didi

python - 使用 SWIG 从 Python 向 C 传递数组参数

转载 作者:行者123 更新时间:2023-11-28 18:38:52 26 4
gpt4 key购买 nike

我是第一次使用 SWIG + Python + C,我在将数组从 Python 传递到 C 时遇到了问题。

这是 C 中的函数签名。

my_setup(char * my_string, int my_count, int my_types[], double my_rate, int my_mode);

我想从 Python 中调用这个 C 函数,如下所示

my_array = [1, 2, 3, 4, 5, 6]
my_setup("My string", 6, my_array, 50, 0)

但我不知道如何构造数组my_array。我得到的错误是

Traceback (most recent call last):
File "test_script.py", line 9, in <module>
r = my_library.my_setup("My string", 6, my_types, 50, 0)
TypeError: in method 'my_setup', argument 3 of type 'int []'

我尝试使用 SWIG interface file for numpy 没有成功和 ctypes .

我希望有人能帮我传递一个数组作为函数 my_setup 的第三个参数。

此外,这是我的第一个堆栈溢出帖子!

最佳答案

my_setup() 中解析 Python 列表,而不是尝试在您的 SWIG .i 文件中翻译它。变化

my_setup(char * my_string, int my_count, int my_types[], double my_rate, int my_mode);

my_setup(char * my_string, int my_count, PyObject *int_list, double my_rate, int my_mode);

在我的设置中

    int *array = NULL;
if ( PyList_Check( int_list ) )
{
int nInts = PyList_Size( int_list );
array = malloc( nInts * sizeof( *array ) );
for ( int ii = 0; ii < nInts; ii++ )
{
PyObject *oo = PyList_GetItem( int_list, ii );
if ( PyInt_Check( oo ) )
{
array[ ii ] = ( int ) PyInt_AsLong( oo );
}
}
}

您必须添加错误检查。从 C 开始,当您使用 SWIG 时,始终将 PyObject * 返回给 Python。这样,您可以使用 PyErr_SetString() 并返回 NULL 以抛出异常。

关于python - 使用 SWIG 从 Python 向 C 传递数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com