在C ++ \ CLI中转换枚举的问题

时间:2020-03-06 14:32:28  来源:igfitidea点击:

我有一个用C ++ \ CLI编写的程序集,它使用了.Net提供的一些枚举。它具有以下特性:

property System::ServiceProcess::ServiceControllerStatus ^ Status  
{  
    ServiceControllerStatus ^ get()  
    {  
        return (ServiceControllerStatus)_status->dwCurrentState;   
    }  
}

它工作正常,但是当我从Ccode使用此程序集时,此属性的类型为

System.Enum

我必须做类型转换

if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
     //do smth

问题很简单:为什么会这样,以及如何解决?

解决方案

我认为枚举不要使用^-尝试将其从属性声明和get()中删除。

在C ++ / CLI中,^类似于标准C ++中的类似*。由于枚举是值类型,因此不应包含^,否则我们将看到它们为System.Enum。

删除^,我们将在Cside上看到正确的枚举。

property System::ServiceProcess::ServiceControllerStatus Status  
{  
    System::ServiceProcess::ServiceControllerStatus get()  
    {  
        return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
    }  
}