gpt4 book ai didi

c# - 是否可以使用属性指定 COM 枚举字段名称?

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:37 26 4
gpt4 key购买 nike

我正在用 .net 程序集替换(部分)Delphi COM 库。我已将许多 COM 接口(interface)和枚举移至 .net 程序集。一切都很好,除了使用 {enum_type_name}_{enum_value_name} 命名约定将枚举导出到类型库。

例子

[ComVisible(true)]
[Guid("318f9e87-444c-11d5-aed1-00105a758da4")]
public enum KeyIDEnum
{
keLeft = 0,
keCentre = 1,
keRight = 2
}

成为

[
uuid(318F9E87-444C-11D5-AED1-00105A758DA4),
version(1.0)
]
typedef enum tagKeyIDEnum
{
KeyIDEnum_keLeft = 0,
KeyIDEnum_keCentre = 1,
KeyIDEnum_keRight = 2
} KeyIDEnum;

我想知道是否有任何方法可以覆盖此默认行为并指定枚举值名称,可能使用属性。像这样的东西:

[ComVisible(true)]
[Guid("318f9e87-444c-11d5-aed1-00105a758da4")]
public enum KeyIDEnum
{
[Name("keLeft")]
keLeft = 0,
[Name("keCentre")]
keCentre = 1,
[Name("keRight")]
keRight = 2
}

我几乎可以肯定有一种方法可以做到这一点,我只需要知道要使用哪个属性类。

最佳答案

总之,我相信可以做到,但并不容易。我几乎可以肯定一个属性不会像导出的 MSDN 页面那样起作用 type conversion talks关于前缀,但没有提到相关属性(而页面的其他部分有)。 System.Runtime.InteropServices中的类列表(与 COM 相关的属性存在的地方)也没有任何看起来有希望的属性。

最后,一个 blog post Mauricio Rojas 描述了如何通过修改 IDL 来做到这一点,但它看起来很难看。 (其他一些博客也有类似的描述。)

关于c# - 是否可以使用属性指定 COM 枚举字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6703131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com