SWIG:将枚举包装为 C#

SWIG: wrap enum to c#

本文关键字:包装 枚举 SWIG      更新时间:2023-10-16

我无法使用SWIG将c ++枚举成员包装为C#。c++ 枚举成员的大小超过 Int32。在 C# 中,枚举成员的默认类型是 Int32,因此我有编译错误。虽然我按照说明进行操作,但我无法解决问题。

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# 包装器中获得了跟随成员,这会导致编译错误cannot implicitly convert type 'uint' to 'int'

我的班级.cs

public enum BigNumbers {
big = 0x80000000,
bigger
} 

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

大数字.cs

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

虽然我想以MyClass成员的身份MyClass.cs获得它。

拜托,有人帮帮我!

很抱歉这个问题真的很愚蠢,我应该更好地阅读手册。
接口文件的正确内容如下:

MyClass.i

%module cpp
%{
#include "MyClass.h"
%}
%typemap(csbase) somens::MyClass::BigNumbers "uint"
%include "MyClass.h"