Un problema con la conversione delle enumerazioni in C ++ \ CLI
-
02-07-2019 - |
Domanda
Ho un assembly, scritto in C ++ \ CLI, che utilizza alcune delle enumerazioni, fornite da .Net. Ha questo tipo di proprietà:
property System::ServiceProcess::ServiceControllerStatus ^ Status
{
ServiceControllerStatus ^ get()
{
return (ServiceControllerStatus)_status->dwCurrentState;
}
}
funziona benissimo, ma quando uso questo assembly dal mio codice C #, il tipo di questa proprietà è
System.Enum
e devo fare il cast del tipo
if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
//do smth
La domanda è semplice: perché è così e come risolverlo?
Soluzione
In C ++ / CLI ^ è come l'analogo * in C ++ standard. Poiché le enumerazioni sono tipi di valore, ^ non deve essere incluso, altrimenti le vedrai come System.Enum .
Rimuovi ^ e vedrai l'enumerazione corretta sul lato C #.
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}
Altri suggerimenti
Penso che gli enum non usino il ^ - prova a rimuoverlo dalla dichiarazione di proprietà e ottieni ().
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow