У меня есть сборка, написанная на 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
Вопрос простой: почему это так и как исправить?





Я думаю, что перечисления не используют ^ - попробуйте удалить его из объявления свойства и get ().
В C++ / CLI ^ похож на аналог * в стандартном C++. Поскольку перечисления являются типами значений, ^ не следует включать, иначе вы увидите их как System.Enum.
Удалите ^, и вы увидите правильное перечисление на стороне C#.
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}