5

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

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

4

2 回答 2

5

在 C++/CLI中, ^就像标准 C++ 中的类似 *。因为枚举是值类型,所以不应包含^ ,否则您会将它们视为System.Enum

删除 ^,您将在 C# 端看到正确的枚举。

property System::ServiceProcess::ServiceControllerStatus Status  
{  
    System::ServiceProcess::ServiceControllerStatus get()  
    {  
        return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
    }  
}
于 2008-09-22T14:22:13.913 回答
3

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

于 2008-09-22T14:11:11.960 回答