如何在C#中编组C++枚举

Roc*_*llz 9 c# c++ pinvoke marshalling

我需要在C++和C#之间创建一个包装器.我有一个非常类似的功能:

virtual SOMEINTERFACE* MethodName(ATTRIBUTE_TYPE attribType = ATTRIBUTE_TYPE::ATTRIB_STANDARD) = 0;
Run Code Online (Sandbox Code Playgroud)

enum声明如下:

enum class ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
};
Run Code Online (Sandbox Code Playgroud)

如何包装ATTRIBUTE_TYPE枚举?

Dav*_*nan 12

您的C++枚举定义如下:

enum class ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
};
Run Code Online (Sandbox Code Playgroud)

默认情况下,enum class类型的int大小.这意味着您可以将其转换为C#,如下所示:

enum ATTRIBUTE_TYPE { 
    ATTRIB_STANDARD, 
    ATTRIB_LENGTH 
};
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的.AC#enum是blittable,这个C#enum完全映射到你的C++枚举.