c# - SWIG:将枚举包装到 C#

标签 c# c++ enums swig

我无法使用 SWIG 将 c++ 枚举成员包装到 C#。 C++ 枚举成员的大小超过 Int32。在 C# 中,枚举成员的默认类型是 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# 包装器中得到了 follow 成员,这导致编译错误无法将类型“uint”隐式转换为“int”

MyClass.cs

  public enum BigNumbers {
    big = 0x80000000,
    bigger
  } 

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

BigNumbers.cs

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

虽然我想将它作为 MyClass 的成员获取到 MyClass.cs 中。

请大家帮帮我!

最佳答案

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

MyClass.i

%module cpp

%{
    #include "MyClass.h"

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

关于c# - SWIG:将枚举包装到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44848300/

相关文章:

c# - TCPClient收不到数据

c# - 在 IQueryable 查询中减去 DateTimes

android - 如何用C++编写Android服务

c++ - 音频混合算法改变音量

c++ - 如何逐步遍历目录树?

C++ 将值设置为类内的枚举项

c# - ASP.NET MVC : Controller or ControllerBase? 中 Controller 的内置基类

c# - 断言非常基本

python - 如何在 Django 模型中使用枚举作为选择字段

c# - 当此信息与对象参数一起传递时,为什么 Enum.GetName() 要求类型?