我想使用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的例子但找不到类似的东西。
答案 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
还有什么其他建议可以改进吗?第一种方法的问题是,通过包含整个头文件,我得到了许多我不需要的自动生成的文件。