Question

J'ai un assemblage, écrit en C ++ \ CLI, qui utilise certaines énumérations fournies par .Net. Il a ce genre de propriétés:

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

cela fonctionne bien, mais lorsque j'utilise cet assembly à partir de mon code C #, le type de cette propriété est

System.Enum

et je dois faire le casting de type

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

La question est simple: pourquoi et comment y remédier?

Était-ce utile?

La solution

En C ++ / CLI ^ est semblable à l'analogue * en C ++ standard. Étant donné que les énumérations sont des types de valeur, ^ ne doit pas être inclus, sinon vous les verrez comme System.Enum .

Supprimez ^ et vous verrez l'énumération correcte du côté C #.

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

Autres conseils

Je pense que les enums n'utilisent pas ^ - essayez de le supprimer de la déclaration de propriété et obtenez ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top