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