c# - 在 C++\CLI 中转换枚举的问题

标签 c# enums c++-cli enumeration

我有一个用 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/

相关文章:

c# - 初学者帮助C#在文本框中显示文件路径

c# - 我如何优化此 actionresult 以获得更好的性能?我需要在何时从 url 等获取 "GET"XML 数据时设置一个计时器

asp.net-mvc-3 - 当我只有一个简短的显示名称时如何获取枚举?

.net - C++/CLI 在运行时显式加载托管 DLL(相当于非托管的 LoadLibrary)

c# - .NET 4.5 命名空间 'Standard'

c++ - "Unresolved Typeref-Token"与 SDL_net 和 .NET

c# - wpf 以编程方式设置排序,以便将标题切换为已排序

c++ - 在 C++ 中使用类似枚举的数据

c - C中枚举的大小是多少?

c# - DevExpress 日期时间选择器