我有一个用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
问题很简单:为什么会这样,以及如何解决?
最佳答案
在C++/CLI中, ^ 类似于标准C++中的类似*。由于枚举是值类型,因此不应包括 ^ ,否则您将看到它们为 System.Enum 。
删除^,您将在C#端看到正确的枚举。
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}