【问题标题】:An Issue with converting enumerations in C++\CLI在 C++\CLI 中转换枚举的问题
【发布时间】:2008-09-22 14:05:52
【问题描述】:

我有一个用 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# enums c++-cli enumeration


    【解决方案1】:

    在 C++/CLI 中 ^ 类似于标准 C++ 中的 *。因为枚举是值类型,所以不应包含 ^,否则您会将它们视为 System.Enum

    删除 ^,您将在 C# 端看到正确的枚举。

    property System::ServiceProcess::ServiceControllerStatus Status  
    {  
        System::ServiceProcess::ServiceControllerStatus get()  
        {  
            return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
        }  
    }
    

    【讨论】:

      【解决方案2】:

      我认为枚举不使用 ^ -- 尝试从属性声明和 get() 中删除它。

      【讨论】:

        猜你喜欢
        • 2021-09-03
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        相关资源
        最近更新 更多