我正在创建一个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,但不确定如何执行此操作。任何帮助将不胜感激。
答案 0 :(得分: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文件(理想情况下,编译并演示问题),您将获得更好的反馈。