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?

È stato utile?

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
scroll top