当在VEE中作为Active X对象公开时,为什么将枚举名称作为前缀添加到我的常量中?

问题描述 投票:0回答:1

我正在使用在与C#中的COM接口之一相同的名称空间中声明的枚举。

当我在Hyper Vee的函数和对象浏览器中查看枚举时,该枚举列在COM界面下方,但是其中的所有常量都将枚举名称添加为前缀。

示例:

Enum = enumName
Const = enumName_constantName

我希望常量仅等于constantName

我以前在VEE中还没有看到这一点,有人知道为什么会这样吗?我在C#代码中声明了错误吗?

public enum EnumName
{
    constantName1, 
    constantName2
};

public interface InterfaceName
{
}

结果是,VEE中显示的常量显示为EnumName_constantName1,等等...

c# enums constants
1个回答
3
投票

否,这是由于.NET枚举类型与C和C ++等语言中的enum关键字之间的显着不兼容引起的。这些语言将枚举成员添加到全局名称空间。这实际上是一个问题,它经常迫使您在枚举成员名称上加上前缀,以免它们与其他标识符冲突。就像您在代码段中所使用的“常量”一样。

最近批准的新C ++语言标准(C ++ 11)实际上使用新的[[enum class关键字已解决了该问题。与.NET枚举的工作方式相同,它们需要以其枚举类型名称作为前缀。巧合的是,六年前C ++ / CLI使用了完全相同的语法。这可能不是偶然的。

类型库导出器无法做任何合理的事情。但是在枚举成员前面加上其类型名称。您所看到的就是“ EnumName_constantName1”。不这样做会引起标识符名称冲突的恐怖。

但是从好的方面来看,您不再需要使用该丑陋的“常数”前缀。客户端代码现在可以使用“ EnumName_Name1”。如果确实需要解决此问题,则可以使用oleview.exe程序将类型库反编译为.idl。编辑typedef并使用midl.exe将其编译回.tlb。否则要做一件痛苦的事。

© www.soinside.com 2019 - 2024. All rights reserved.