Swig枚举使用其他库中的值

时间:2014-01-31 20:49:43

标签: c# c++ enums wrapper swig

我想使用Swig为我的c ++类生成C#包装器。我面临以下问题:

我定义了一个使用来自第三方(闭源)库的值的枚举。 这些值在HEADER_FROM_3RD_PARTY_LIB.h中声明为

#define 3RD_PARTY_LIB_CONST_VALUE_1 -4
#define 3RD_PARTY_LIB_CONST_VALUE_1 -10

我的标题文件如下:

#include "HEADER_FROM_3RD_PARTY_LIB.h"

namespace Foo
{
    namespace Bar
   {    
    class MyClass
    {       
     public:    
            enum MyEnum
        {           
        Enum1 = 3RD_PARTY_LIB_CONST_VALUE_1,            
        Enum2 = 3RD_PARTY_LIB_CONST_VALUE_2     
        };
        }
    }
}

我使用以下swig代码:

%module cpp  

%{  
    #include "MyClass.h"  
%}  

%include <windows.i>  
%include "MyClass.h"  

成功生成了包装器,但生成的csharp文件生成了以下枚举:

public enum MyEnum
{           
    Enum1 = 3RD_PARTY_LIB_CONST_VALUE_1,            
    Enum2 = 3RD_PARTY_LIB_CONST_VALUE_2     
}

显然这会产生错误,因为C#找不到3RD_PARTY_LIB_CONST_VALUE_1和3RD_PARTY_LIB_CONST_VALUE_2值。

任何可以解决此问题的想法?我看了一下Swig的例子但找不到类似的东西。

1 个答案:

答案 0 :(得分:1)

我到目前为止找到的唯一解决方案是要么包括

#include "HEADER_FROM_3RD_PARTY_LIB.h"
swig文件中的

或在swig文件中重新定义值

#define 3RD_PARTY_LIB_CONST_VALUE_1 -4
#define 3RD_PARTY_LIB_CONST_VALUE_1 -10

还有什么其他建议可以改进吗?第一种方法的问题是,通过包含整个头文件,我得到了许多我不需要的自动生成的文件。