Pergunta

Eu tenho uma montagem, escrito em C ++ \ CLI, que utiliza algumas das enumerações, fornecido pela Net. Ele tem esse tipo de propriedades:

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

ele funciona bem, mas quando eu usar este assembly do meu código C #, tipo da propriedade é

System.Enum

e eu tenho que fazer type-cast

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

A questão é simples: por que é assim, e como corrigi-lo

Foi útil?

Solução

Em C ++ / CLI ^ é como o * análogo no padrão C ++. Porque enumerações são tipos de valor do ^ não devem ser incluídos caso contrário você vai vê-los como System.Enum .

Remova a ^ e você vai ver a enumeração correta no lado C #.

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

Outras dicas

Eu acho que enums não use o ^ -. Tente removê-lo a partir da declaração de propriedade e obter ()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top