SWIG无法正确转换typedef类型

时间:2013-05-23 13:34:07

标签: c++ python arrays typedef swig

我正在使用SWIT将vc项目转换为python。 我发现当struct有一个类型为“typedef char TEXT [16]”的成员时,无法正确转换。 例如:

typedef char TEXT[16];
struct MYSTRUCT
{       
    TEXT    TradingDay;     
};

包装器cpp无法正确编译。 “错误C2075:'运算符new()'的目标:数组初始化需要大括号” 但是,如果typedef不是数组,就像这样:

    typedef int NUMBER;
    struct MYSTRUCT2
{       
    NUMBER Money;       
};

没有问题。 我该怎么办? THX!

P.S: 我提交:

%module MyDataAPI
%include "typemaps.i"

%header %{
#include "../References/MyDataAPI.h"

%}

namespace MyDataAPI
{
     struct MYSTRUCT
    {       
        TEXT    TradingDay;     
    };
    struct MYSTRUCT2
    {       
        NUMBER Money;       
    };
}

1 个答案:

答案 0 :(得分:1)

确保SWIG处理您的typedef语句。 %header仅向生成的文件添加代码,SWIG不处理该数据。 %inline都将代码直接添加到生成的文件中,使用SWIG处理它。这是我的.i文件:

%module x

%inline %{
    typedef char TEXT[16];
    typedef int NUMBER;
    namespace MyDataAPI
    {
        struct MYSTRUCT
        {
            TEXT TradingDay;
        };
        struct MYSTRUCT2
        {
            NUMBER Money;
        };
    }
%}

并使用:

T:\>py
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import x
>>> a=x.MYSTRUCT()
>>> a.TradingDay
''
>>> a.TradingDay='ABCDEFGHIJKLMNOPQ'   # Note this is too long, 17 chars...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: in method 'MYSTRUCT_TradingDay_set', argument 2 of type 'char [16]'
>>> a.TradingDay='ABCDEFGHIJKLMNOP'
>>> a.TradingDay
'ABCDEFGHIJKLMNOP'
>>> b=x.MYSTRUCT2()
>>> b.Money
0
>>> b.Money=100
>>> b.Money
100