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

发布于 2024-07-05 00:27:00 字数 547 浏览 6 评论 0原文

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

问题很简单:为什么会这样,以及如何修复它?

I have an assembly, written in C++\CLI, which uses some of enumerations, provided by .Net. It has such kind of properties:

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

it works fine, but when i use this assembly from my C# code, type of this property is

System.Enum

and i have to make type-cast

 if ((ServiceControllerStatus)currentService.Status == ServiceControllerStatus.Running)
     //do smth

The question is simple: why is it so, and how to fix it ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧话新听 2024-07-12 00:27:00

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

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

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

In C++/CLI ^ is like the analagous * in standard C++. Because enumerations are value types the ^ should not be included otherwise you will see them as System.Enum.

Remove the ^ and you will see the correct enumeration on C# side.

property System::ServiceProcess::ServiceControllerStatus Status  
{  
    System::ServiceProcess::ServiceControllerStatus get()  
    {  
        return (System::ServiceProcess::ServiceControllerStatus)_status->dwCurrentState;   
    }  
}
转身以后 2024-07-12 00:27:00

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

I think enums don't use the ^ -- try removing it from the property declaration and get().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文