2008-09-22 14 views
5

Mam zestaw napisany w C++ \ CLI, który używa niektórych wyliczeń dostarczonych przez .Net. Ma taki rodzaj własności:Problem z konwertowaniem wyliczeń w C++ CLI

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

to działa dobrze, ale kiedy używać tego zestawu z mojego kodu C#, typ obiektu jest

System.Enum 

i muszę uczynić typu cast

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

Pytanie jest proste: dlaczego tak jest i jak to naprawić?

Odpowiedz

5

W C++/CLI ^ jest jak analagiczny * w standardowym C++. Ponieważ wyliczenia są typami wartości, nie należy podawać wartości ^. W przeciwnym razie zobaczysz je jako System.Enum.

Usuń ^, a zobaczysz poprawne wyliczenie po stronie C#.

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

Myślę, że wyrazy nie używają^- spróbuj usunąć je z deklaracji właściwości i get().