【发布时间】:2014-04-06 05:40:19
【问题描述】:
我需要在 C++ 和 C# 之间创建一个包装器。我有一个与此非常相似的功能:
virtual SOMEINTERFACE* MethodName(ATTRIBUTE_TYPE attribType = ATTRIBUTE_TYPE::ATTRIB_STANDARD) = 0;
enum 声明如下:
enum class ATTRIBUTE_TYPE {
ATTRIB_STANDARD,
ATTRIB_LENGTH
};
如何包装 ATTRIBUTE_TYPE 枚举?
【问题讨论】:
-
ATTRIBUTE_TYPE的底层类型是什么? -
只是一个简单的枚举:枚举类 ATTRIBUTE_TYPE { ATTRIB_STANDARD, ATTRIB_LENGTH };
-
只要您在 C# 和 C++ 中指定枚举类型(它们是相同的),您应该能够直接在 P/Invoke 中使用枚举。请注意,并非所有共享名称的 C++ 和 C# 类型都是相同的,例如
long在 C# 中是一个 int64,而在 C++ 中它只是一个 int32。 -
@Mgetz
“long”类型在 Microsoft C++ 中是 32 位;它遵循大多数其他地方(例如 GCC)的架构大小。
标签: c# c++ pinvoke marshalling