SWIG:将枚举包装到c# 我不能用SWIG将C++成员枚举到C ^。C++枚举成员的大小超过了32位。在C#中,enum memeber的默认类型是Int32,因此我有编译错误。虽然我遵循规则,但我不能解决这个问题

SWIG:将枚举包装到c# 我不能用SWIG将C++成员枚举到C ^。C++枚举成员的大小超过了32位。在C#中,enum memeber的默认类型是Int32,因此我有编译错误。虽然我遵循规则,但我不能解决这个问题,c#,c++,enums,swig,C#,C++,Enums,Swig,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

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 };
%}
%module cpp

%{
    #include "MyClass.h"

%}
%typemap(csbase) somens::MyClass::BigNumbers "uint"
%include "MyClass.h"
结果,我在生成的c#包装中得到了follow成员,这导致编译错误
无法隐式地将类型“uint”转换为“int”

MyClass.cs

  public enum BigNumbers {
    big = 0x80000000,
    bigger
  } 
public enum BigNumbers : uint {
  big = 0x80000000,
  bigger
}
和全局uint枚举在单独的文件中:

BigNumbers.cs

  public enum BigNumbers {
    big = 0x80000000,
    bigger
  } 
public enum BigNumbers : uint {
  big = 0x80000000,
  bigger
}
而我想作为MyClass的成员在
MyClass.cs
中获取它


求求你,任何人帮帮我

很抱歉问了这么愚蠢的问题,我应该把手册读得更好。
接口文件的正确内容如下:

MyClass.i

%module cpp

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

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

%{
    #include "MyClass.h"

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

您可以为
enum
指定基础类型,我正在学习SWIG。我对SWIG一无所知,但是你可以像这样定义枚举的类型
public enum MyEnum:long{where=long.MaxValue}
Yes!这正是我想在C++代码中自动从枚举中得到的,但是不能