2008-09-22 11 views
5

Tengo un ensamblado, escrito en C++ \ CLI, que utiliza algunas de las enumeraciones, proporcionadas por .Net. Tiene este tipo de inmuebles:Un problema con la conversión de enumeraciones en C++ CLI

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

funciona bien, pero cuando se utiliza este conjunto de mi código C#, el tipo de esta propiedad es

System.Enum 

y tengo que hacer el tipo fundido

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

La pregunta es simple: ¿por qué es así y cómo solucionarlo?

Respuesta

5

En C++/CLI ^ es como el análogo * en C++ estándar. Como las enumeraciones son tipos de valores, no se debe incluir ^; de lo contrario, los verá como System.Enum.

Elimina el^y verás la enumeración correcta en el lado C#.

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

Creo que las enumeraciones no usan^- intente eliminarlo de la declaración de propiedad y get().