Проблема с преобразованием перечислений в C ++ \ CLI - PullRequest
5 голосов
/ 22 сентября 2008

У меня есть сборка, написанная на C ++ \ CLI, которая использует некоторые перечисления, предоставленные .Net. Он имеет такие свойства:

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

работает нормально, но когда я использую эту сборку из моего кода C #, тип этого свойства

System.Enum

и мне нужно сделать приведение типа

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

Вопрос прост: почему так и как это исправить?

Ответы [ 2 ]

5 голосов
/ 22 сентября 2008

В C ++ / CLI ^ похоже на аналог * в стандартном C ++. Поскольку перечисления являются типами значений, ^ не следует включать, иначе вы увидите их как System.Enum .

Удалите ^, и вы увидите правильное перечисление на стороне C #.

property System::ServiceProcess::ServiceControllerStatus Status  
{  
    System::ServiceProcess::ServiceControllerStatus get()  
    {  
        return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
    }  
}
3 голосов
/ 22 сентября 2008

Я думаю, что перечисления не используют ^ - попробуйте удалить его из объявления свойства и получить ().

...