ServiceControllerStatus

ServiceControllerStatus

我有一个用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;
    }
}

10-01 14:39