在C ++ \ CLI中转换枚举的问题
时间:2020-03-06 14:32:28 来源:igfitidea点击:
我有一个用C ++ \ CLI编写的程序集,它使用了.Net提供的一些枚举。它具有以下特性:
property System::ServiceProcess::ServiceControllerStatus ^ Status { ServiceControllerStatus ^ get() { return (ServiceControllerStatus)_status->dwCurrentState; } }
它工作正常,但是当我从Ccode使用此程序集时,此属性的类型为
System.Enum
我必须做类型转换
if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running) //do smth
问题很简单:为什么会这样,以及如何解决?
解决方案
我认为枚举不要使用^-尝试将其从属性声明和get()中删除。
在C ++ / CLI中,^类似于标准C ++中的类似*。由于枚举是值类型,因此不应包含^,否则我们将看到它们为System.Enum。
删除^,我们将在Cside上看到正确的枚举。
property System::ServiceProcess::ServiceControllerStatus Status { System::ServiceProcess::ServiceControllerStatus get() { return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState; } }