Проблема с преобразованием перечислений в C++\CLI
-
02-07-2019 - |
Вопрос
У меня есть сборка, написанная на 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
Вопрос простой:почему так, и как это исправить?
Решение
В С++/CLI ^ аналогичен аналогичному * в стандарте C++.Поскольку перечисления являются типами значений, ^ не должны быть включены, иначе вы увидите их как System.Enum.
Удалите ^, и вы увидите правильное перечисление на стороне C#.
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}
Другие советы
Я думаю, что перечисления не используют ^ - попробуйте удалить его из объявления свойства и получить().
Не связан с StackOverflow