【发布时间】:2019-12-14 18:23:40
【问题描述】:
我有一个带有枚举声明的 C++ 库,该库由 C# 应用程序使用。我想在 C# 端使用这个枚举,但它不起作用。如果我在 ProfileType 上按 F12(转到定义),它会打开一个“来自元数据”的文件:
namespace BatchProcessingLib
{
[CLSCompliant(false)]
[NativeCppClass]
public enum ProfileType
{
}
}
看起来很空。
在C++头文件中声明为:
public enum ProfileType
{
ProfileTypeCross = 0,
ProfileTypeDiag = 1,
ProfileTypeUser = 2
};
我只尝试过 ProfileTypeCross 或 ProfileType.ProfileTypeCross 但我总是遇到编译器错误:
Error CS0117 'ProfileType' does not contain a definition for 'ProfileTypeUser'
有办法吗?
【问题讨论】:
-
C++ 使用 C++ 枚举。 C# 使用 C# 枚举。它们在句法或语义上并不完全兼容。
-
所以这意味着你做不到?如果不可能,最优雅的解决方案是什么?现在我正在做:“(ProfileType)2”并且编译器很高兴。
-
您可能会发现这很有帮助...stackoverflow.com/questions/18765/…
-
来自 MS doc:在原始 C 和 C++ 枚举类型中,未限定的枚举数在声明枚举的整个范围内都是可见的。在作用域枚举中,枚举数名称必须由枚举类型名称限定。 C# 需要范围枚举。