Um problema com a conversão enumerações em C ++ \ CLI
-
02-07-2019 - |
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
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