Un problème avec la conversion des énumérations dans C ++ \ CLI
-
02-07-2019 - |
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?
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 ().