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