c++ - SWIG 无法正确转换 typedef 类型

标签 c++ python arrays typedef swig

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

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

wrapper cpp 无法正常编译。 “错误 C2075:‘Target of operator new()’:数组初始化需要大括号” 但是,如果 typedef 不是一个数组,像这样:

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

都会有的。 我应该怎么办? 谢谢!

附言: 我归档:

%module MyDataAPI
%include "typemaps.i"

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

%}

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

最佳答案

确保您的 typedef 语句由 SWIG 处理。 %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

关于c++ - SWIG 无法正确转换 typedef 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715336/

相关文章:

ios - 如何在 switch 语句中使用谓词

c++ - zeromq:重置 REQ/REP 套接字状态

c# - 从原始 ECG 信号中提取心率的算法

python - 在 Pandas DataFrames 中找到最近点

python - 带有 SyncReplicasOptimizer Hook 的 MonitoredTrainingSession 不能用占位符初始化

python - 重新缩放一个 numpy 数组

c++ - C++ try/catch 与 C setjmp/longjmp 有何不同?

c++ - 获取其他模块访问变量的路径

python - 使用 extract_image_patches 后重建图像

JAVA - 验证二维数组上的对角线