【问题标题】:Using a GList datatype in python function via SWIG通过 SWIG 在 python 函数中使用 GList 数据类型
【发布时间】:2013-05-30 08:02:57
【问题描述】:

我正在创建一个 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,但不知道如何去做。任何帮助将不胜感激。

【问题讨论】:

  • 您遇到的具体错误是什么?
  • @xaxxon - 我已经编辑了我的问题以包含我收到的错误。

标签: python c swig glib


【解决方案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 文件(理想情况下,它可以编译并演示问题),您将获得更好的反馈。

【讨论】:

  • 感谢您的帮助 - 现在更清楚了。我已经有一个 SWIG .i 文件,所以会尝试进行您建议的更改,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多