SWIG:将枚举包装到c#

时间:2017-06-30 13:59:33

标签: c# c++ enums swig

我无法使用SWIG将c ++枚举成员包装到C#中。 c ++枚举成员的大小超过Int32。在C#默认类型的enum memeber是Int32,因此我有编译错误。虽然我遵循instructions,但我无法解决问题。

MyClass.h

class  MyClass
{
public:
    MyClass() {}
    ~MyClass() {}
    enum  BigNumbers
    {
        big = 0x80000000, bigger
    };
};

MyClass.i

%module cpp

%{
    #include "MyClass.h"
%}
%include "MyClass.h"

%typemap(csbase) BigNumbers "uint"
%inline %{
  enum BigNumbers { big=0x80000000, bigger };
%}

结果我在生成的c#wrapper中得到了跟随成员,导致编译错误cannot implicitly convert type 'uint' to 'int'

MyClass.cs

  public enum BigNumbers {
    big = 0x80000000,
    bigger
  } 

和单独文件中的全局uint枚举:

BigNumbers.cs

public enum BigNumbers : uint {
  big = 0x80000000,
  bigger
}

虽然我想以MyClass.cs作为MyClass的成员来获取它。

拜托,有人帮助我!

1 个答案:

答案 0 :(得分:2)

对不起真的愚蠢的问题,我应该更好地阅读手册 正确的接口文件内容如下:

<强> MyClass.i

%module cpp

%{
    #include "MyClass.h"

%}
%typemap(csbase) somens::MyClass::BigNumbers "uint"
%include "MyClass.h"