使用其他库中的值枚举



我想使用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     
}

显然这会生成错误

有什么想法可以解决?我看了一个swig示例,但找不到类似的东西。

我到目前为止发现的唯一解决方案是包括

#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

还有其他建议如何改善?第一种方法的问题是,通过包含整个标头文件,我会得到很多我不需要的自动生成的文件。

最新更新