2009-12-09 132 views

回答

37

假设您的本机代码

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#的铸造方式。

+2

从上面的代码,我想你是从本地投射到托管枚举。从托管到本地的其他方面呢? – Lopper 2009-12-10 06:53:38

+5

静态演员是你的朋友的两种方式... nativeST = static_cast (managedST); – mcdave 2009-12-10 07:01:28

+0

谢谢mcdave! :) – Lopper 2009-12-10 07:01:51

1

这取决于。例如,如果您有一个具有ushort基础类型的CLI枚举,则它不能保持257的值。默认情况下,CLI枚举基于int,在大多数情况下应该没问题。如果您的本机C++代码使用无符号32位整数/ 64位整数作为底层类型(如果枚举),请将CLI枚举的基本切换为UInt32 long或ulong。

+2

我不会遇到这个问题,因为两个枚举都是int类型的。但是在这种情况下应该使用哪种类型的演员?它应该是const_cast,static_cast,dynamic_cast,reinterpret_cast,safe_cast或只是C#转换(例如(int))? – Lopper 2009-12-10 01:40:27