2014-03-04 68 views
8

我需要在C++和C#之间创建一个包装。我也非常相似,这样的功能:如何在C#中编组C++枚举

virtual SOMEINTERFACE* MethodName(ATTRIBUTE_TYPE attribType = ATTRIBUTE_TYPE::ATTRIB_STANDARD) = 0; 

enum声明如下:

enum class ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
}; 

如何换行ATTRIBUTE_TYPE枚举?

+0

“ATTRIBUTE_TYPE”的底层类型是什么? – Mgetz

+0

只是一个简单的枚举:枚举类ATTRIBUTE_TYPE { ATTRIB_STANDARD, ATTRIB_LENGTH }; – Rock3rRullz

+3

只要您在C#和C++中指定枚举类型(并且它们是相同的),则应该可以直接在P/Invoke中使用枚举。需要预先告知的是,并非所有共享名称的C++和C#类型都是相同的,例如, C#中的long是一个int64,而在C++中它只是一个int32。 – Mgetz

回答

8

你的C++枚举的定义是这样的:

enum class ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
}; 

默认情况下,enum class类型int大小。这意味着你可以像这样将它翻译成C#:

enum ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
}; 

这就是它的全部。一个C#枚举是blittable,这个C#enum完全映射到你的C++枚举。

+1

谢谢你为我澄清这一点 – Rock3rRullz