我有一个用 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
问题很简单:为什么会这样,如何解决?
最佳答案
在 C++/CLI 中,^ 类似于标准 C++ 中的类似 *。因为枚举是值类型,所以不应包含 ^,否则您会将它们视为 System.Enum。
删除 ^,您将在 C# 端看到正确的枚举。
property System::ServiceProcess::ServiceControllerStatus Status
{
System::ServiceProcess::ServiceControllerStatus get()
{
return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;
}
}
关于c# - 在 C++\CLI 中转换枚举的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/115031/