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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top