在 C++\CLI 中转换枚举的问题
我有一个用 C++\CLI 编写的程序集,它使用 .Net 提供的一些枚举。 它具有这样的属性:
property System::ServiceProcess::ServiceControllerStatus ^ Status
{
ServiceControllerStatus ^ get()
{
return (ServiceControllerStatus)_status->dwCurrentState;
}
}
它工作得很好,但是当我从 C# 代码中使用这个程序集时,这个属性的类型是
System.Enum
,我必须进行类型转换
if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
//do smth
问题很简单:为什么会这样,以及如何修复它?
I have an assembly, written in C++\CLI, which uses some of enumerations, provided by .Net. It has such kind of properties:
property System::ServiceProcess::ServiceControllerStatus ^ Status
{
ServiceControllerStatus ^ get()
{
return (ServiceControllerStatus)_status->dwCurrentState;
}
}
it works fine, but when i use this assembly from my C# code, type of this property is
System.Enum
and i have to make type-cast
if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
//do smth
The question is simple: why is it so, and how to fix it ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 C++/CLI 中 ^ 类似于标准 C++ 中的类似 *。 由于枚举是值类型,因此不应包含 ^,否则您会将它们视为 System.Enum。
删除 ^,您将在 C# 端看到正确的枚举。
In C++/CLI ^ is like the analagous * in standard C++. Because enumerations are value types the ^ should not be included otherwise you will see them as System.Enum.
Remove the ^ and you will see the correct enumeration on C# side.
我认为枚举不使用 ^ - 尝试将其从属性声明和 get() 中删除。
I think enums don't use the ^ -- try removing it from the property declaration and get().