2017-06-30 20 views
1

SWIGを使用してC++ enumメンバーをC#にラップすることはできません。 C++ enumメンバーのサイズはInt32を超えています。 C#では、enumメンバーのデフォルトの型はInt32なので、コンパイルエラーです。私はinstructionsに従いますが、私は問題を解決することはできません。SWIG:enum to c#

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

私はコンパイルエラーcannot implicitly convert type 'uint' to 'int'

を引き起こす生成されたC#ラッパーのメンバーを、従ってもらいますMyClass.cs別のファイルに

public enum BigNumbers { 
    big = 0x80000000, 
    bigger 
    } 

とグローバルなuint列挙:

BigNumbers.cs

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

私は、MyClassののメンバーとしてMyClass.csでそれを取得したいしながら。

よろしくお願いいたします。

+0

あなたは、私はちょうどSWIGを学んでいる 'enum' – juharr

+0

のための基本となる型を指定することができます。あなたはもう少し詳しく書くことができますか? – Vasliy

+0

私はSWIGについて何も知らないが、この 'enum MyEnum:long {whatever = long.MaxValue}'のような列挙型を定義することができる。 – juharr

答えて

1

申し訳ありませんが本当にばかな質問のために、私はマニュアルをよく読んでいなければなりません。次のようにインタフェースファイルの
正しい内容は次のとおりです。

MyClass.i

%module cpp 

%{ 
    #include "MyClass.h" 

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