Проблема с преобразованием перечислений в C++\CLI

StackOverflow https://stackoverflow.com/questions/115031

  •  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;   
    }  
}

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top