2009-12-09 16 views

答えて

37

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

であり、あなたのマネージコードは、あなたが、私はいつもstatic_castを使用

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

を使用してネイティブに管理するからキャストすることができます

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

ですキャスティングのC#の方法ではありません。

+2

上記のコードから、あなたはネイティブから管理された列挙型にキャストしていると思います。それ以外の方法で管理対象からネイティブに移行するのはどうですか? – Lopper

+5

スタティックキャストは、両方の方法であなたの友人です... nativeST = static_cast (managedST); – mcdave

+0

ありがとうmcdave! :) – Lopper

1

です。たとえば、基礎となるタイプのushortを持つCLI enumを使用している場合、257のvallueを保持することはできません。デフォルトでは、CLI enumはintに基づいています。列挙型のネイティブC++コードで、符号なし32ビットint/64ビットintを基になる型として使用する場合は、CLI enumの基数をUInt32 longまたはulongに切り替えます。 、あなたのネイティブコードを仮定し

+2

両方の列挙型がint型であるため、この問題は発生しません。しかし、この場合、どのタイプのキャストを使用すべきですか?それはconst_cast、static_cast、dynamic_cast、reinterpret_cast、safe_cast、またはちょうどC#キャスト(例は(int))であるべきですか? – Lopper

関連する問題