30

ネイティブコードから同じ値を含むenumマネージコードに(C ++ / CLIで)キャストする正しい方法は何ですか?たとえばC++/ CLIのようにC#のキャスト方法を使用することとの違いはありますか?enumenum(int)

4

2 に答える 2

42

ネイティブコードが

enum shape_type_e
{
    stUNHANDLED     = 0,            //!< Unhandled shape data.
    stPOINT         = 1             //!< Point data.
    ...
};

マネージコードは

public enum class ShapeType
{
    Unhandled   = 0,
    Point       = 1,
    ...
};

ネイティブからマネージドにキャストできます

shape_type_e nativeST = stPOINT;
ShapeType managedST = static_cast<ShapeType>(nativeST);
Debug.Assert(managedST == ShapeType::Point);

私は常にstatic_cast、C#のキャスト方法ではなくを使用します。

于 2009-12-10T04:54:26.007 に答える
1

場合によります。たとえば、基になるタイプがushortであるCLI列挙型がある場合、257の値を保持することはできません。デフォルトでは、CLI列挙型はintに基づいており、ほとんどの場合は問題ありません。ネイティブC++コードが列挙型の基になる型としてunsigned32bitints / 64bit intsを使用している場合は、CLI列挙型のベースをUInt32(longまたはulong)に切り替えます。

于 2009-12-09T22:47:01.263 に答える