ATL/COM 中的 IDL:我可以发布复杂类型的 const 吗?

Posted

技术标签:

【中文标题】ATL/COM 中的 IDL:我可以发布复杂类型的 const 吗?【英文标题】:IDL in ATL/COM: Can I publish a const of a complex type? 【发布时间】:2011-01-07 23:08:27 【问题描述】:

我知道如何在 IDL 中发布一个简单类型的 const,例如:

const long blah = 37

但是我想发布复杂类型的 const,带有方法,或者至少是可读的类似结构的成员字段。例如,可能是一个名为 CarType 的类型,它具有“get_Make”、“get_Model”、“get_Year”、“get_BasePrice”等访问器字段。

那我想发布 const 实例,比如 FORD_PINTO_1973。

(请不要过多阅读示例,告诉我这个特定示例更适合没有 const 实例或类似实例的常规类)。

我不知道如何在 IDL 中定义 FORD_PINTO_1973 的年份字段为 1973 这一事实。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

IDL 用于定义接口 - 可以对对象执行的操作的约定。真实对象的实现超出了 IDL。

为了提供只读属性,请提供一个 getter(使用 propget 属性)并且不提供 setter(propput)。

【讨论】:

IDL 不仅仅用于定义接口;例如,你可以定义枚举,你可以定义常量,你可以定义结构。鉴于您可以定义常量并且您可以定义结构,我不明白为什么您可以定义结构的常量实例是不可能的,并且这种能力将满足我的要求。 是的,你可以定义结构和接口——它们是指定实例行为方式的契约,但你不能自己定义实例。 是的,您可以定义实例。例如,您可以定义一个 long 的实例。

以上是关于ATL/COM 中的 IDL:我可以发布复杂类型的 const 吗?的主要内容,如果未能解决你的问题,请参考以下文章

ATL/COM 对象的链接方法

设置我的 ATL COM 回调函数

创建实现特定接口的 ATL COM 对象

ATL/COM:MIDL 编译器不输出分配接口的 UUID

使用大量 IDL 接口管理 COM 类型库中的定义

从外部类型库导入 IDL 中的接口