如何重命名从C enum类型创建的SWIG生成的代理Java类

时间:2011-12-09 22:24:04

标签: swig

我正在尝试使用SWIG重命名将自动生成的代理Java类的名称test_cache_t.java更改为Example.java。我已经尝试了下面的内容,因为它适用于this question的C结构,但它不适用于C枚举。有任何想法吗?我收到的一些警告并没有引起我的注意......

%module Example

%rename (Example) test_cache_t_;
typedef enum test_cache_t_ {
    CACHE_FALSE = 0,
    CACHE_TRUE = 1
} test_cache_t;

%{
  #include "Example.h"
%}
%include "Example.h"
[exec] /test/include/Example.h:84: Warning 302: Identifier 'test_cache_t' redefined (ignored) (Renamed from 'test_cache_t_'),
[exec] test.i:7: Warning 302: previous definition of 'test_cache_t' (Renamed from 'test_cache_t_').
[exec] /test/include/Example.h:82: Warning 302: Identifier 'CACHE_FALSE' redefined (ignored),
[exec] test.i:5: Warning 302: previous definition of 'CACHE_FALSE'.
[exec] /test/include/Example.h:84: Warning 302: Identifier 'CACHE_TRUE' redefined (ignored),
[exec] test.i:7: Warning 302: previous definition of 'CACHE_TRUE'.

1 个答案:

答案 0 :(得分:1)

我认为你有两个问题:

  1. 您的模块与您的(%rename d)类型具有相同的名称,因此您有两件事想要成为Example.java。

    解决方案:从%rename

  2. 更改模块名称或新名称
  3. 看起来您已经为SWIG提供了相同enum的两个定义,一次在接口文件中,一次在头文件中。

    解决方案:可能会从接口文件中删除typedef enum test_cache_t_,或者在%ignore之前使用%include,或者完全删除%include

  4. 我的最终界面文件在测试结束时看起来像:

    %module SomeOtherName
    
    %{
      #include "Example.h"
    %}
    
    %rename (Example) test_cache_t;
    
    %include "Example.h"
    

    奇怪的是,为了实现这一点,我必须使用typedef中的%rename'名称,而不是enum名称。我不太确定为什么这似乎与struct / class的情况相反。