0

我正在创建一个 python 脚本,它通过 SWIG 调用一些 C 函数。

我调用大多数函数都没有问题,但是一个特定的函数将 GList 数据类型作为参数:

C 函数的定义如下:

void some_function(GList *guid_list)

我试图通过它的 SWIG 创建的 python 模块来调用它

some_list = ['a', 'b', 'c']
module_from_swig.some_function(some_list)

但得到以下错误:

Traceback (most recent call last):
.
.
.
File "/usr/local/lib/python2.7/dist-packages/module_from_swig.py", line 1828, in some_function
    return _module_from_swig.some_function(*args)

TypeError: in method 'some_function', argument 1 of type 'GList *'

我假设我需要以某种方式将 python 列表转换为 Glist,但不知道如何去做。任何帮助将非常感激。

4

1 回答 1

1

首先,您的 SWIG 接口文件需要定义GList,然后您可以使用最小的 SWIG 文件,例如:

%module MyModule

%inline %{
#include "Glist.h"
#include "functions.h"
%}

并使用如下功能:

>>> import MyModule
>>> glist = MyModule.GList()
>>> glist.some_field = some_value
>>> glist.some_other_field = some_value
>>> MyModule.some_function(glist)

这是相当模糊的,但没有太多要继续下去。如果GList很复杂,typemap可能需要编写。提供函数和头文件的简单示例以及您正在使用的 SWIG .i 文件(理想情况下,它可以编译并演示问题),您将获得更好的反馈。

于 2013-05-31T02:49:17.813 回答