IDL 特性

传统上,维护 .idl 文件意味着必须:

  • 熟悉 .idl 文件的结构和语法,以便能够对其进行修改。

  • 依赖于向导来修改 .idl 文件的某些方面。

现在,你可以使用 Visual C++ IDL 属性在源代码文件内部修改 .idl 文件。 在许多情况下,Visual C++ IDL 属性与 MIDL 属性同名。 当 Visual C++ IDL 属性和 MIDL 属性同名时,这意味着将 Visual C++ 属性放入源代码文件会生成一个包含同名 MIDL 属性的 .idl 文件。 但是,Visual C++ IDL 属性不一定提供 MIDL 属性的所有功能。

不与 COM 属性一起使用时,IDL 属性允许你定义接口。 编译源代码时,属性用于定义生成的 .idl 文件。 在 ATL 项目中与 COM 属性一起使用时,某些 IDL 属性(例如 coclass)会导致代码注入到项目中。

请注意,idl_quote 允许使用当前版本的 Visual C++ 中不支持的 MIDL 构造。 此属性以及 importlibincludelib 等其他属性可帮助你在当前 Visual Studio C++ 项目中使用现有的 .idl 文件。

属性 说明
aggregatable 指示一个可由另一个控件聚合的控件。
appobject 将组件类标识为应用程序对象,它与完整的 EXE 应用程序相关联,并指示组件类的函数和属性在此类型库中全局可用。
async_uuid 指定可指示 MIDL 编译器同时定义 COM 接口的同步版本和异步版本的 UUID。
bindable 指示该属性支持数据绑定。
call_as 使不可远程处理的函数能够映射到远程函数。
case 与联合中的 switch_type 特性一起使用。
coclass 将类定义作为 coclass 放入 .idl 文件中。
control 指定用户定义类型是控件。
cpp_quote 将不带引号字符的指定字符串发送到生成的头文件中。
defaultbind 指示能够最好地表示该对象的单个可绑定属性。
defaultcollelem 用于 Visual Basic 代码优化。
defaultvalue 允许为类型化的可选参数指定默认值。
default 指示组件类中定义的自定义接口或调度接口表示默认的可编程性接口。
defaultvtable 将接口定义为控件的默认 vtable 接口。
dispinterface 将一个接口作为调度接口置于 .idl 文件中。
displaybind 指示应作为可绑定属性显示给用户的属性。
dual 将一个接口作为 dual 接口置于 .idl 文件中。
entry 通过标识 DLL 中的入口点,指定模块中导出的函数或常量。
first_is 指定要传输的第一个数组元素的索引。
helpcontext 指定允许用户在帮助文件中查看有关此元素的信息的上下文 ID。
帮助文件 设置类型库的帮助文件的名称。
helpstringcontext 指定 .hlp 或 .chm 文件中帮助主题的 ID。
helpstringdll 指定要用于执行文档字符串查找(本地化)的 DLL 名称。
helpstring 指定一个字符串,用于描述应用该字符串的元素。
hidden 指示该项虽然存在,但不应在面向用户的浏览器中显示。
idl_module 指定 DLL 中的入口点。
idl_quote 允许使用当前的 Visual C++ 版本不支持的属性或 IDL 构造。
id 指定成员函数的 DISPID(属性或方法,在接口或分派接口中)。
iid_is 指定接口指针指向的 COM 接口的 IID。
immediatebind 指示将立即通知数据库对数据绑定对象的属性所做的所有更改。
importlib 使已编译到另一个类型库中的类型可供所创建的类型库使用。
import 指定另一个 .idl、.odl 或包含要从主 .idl 文件引用的定义的头文件。
包括 指定要包含在生成的 .idl 文件中的一个或多个头文件。
includelib 使 .idl 或 .h 文件包含在生成的 .idl 文件中。
in 指示参数将从调用过程传递到被调用过程。
last_is 指定要传输的最后一个数组元素的索引。
lcid 允许将区域设置标识符传递给函数。
length_is 指定要传输的数组元素数量。
licensed 表示其应用的组件类已获得许可,并且必须使用 IClassFactory2 进行实例化。
local 在接口标头中使用时,允许将 MIDL 编译器用作标头生成器。 在单个函数中使用时,指定不为其生成存根的本地过程。
max_is 指定有效数组索引的最大值。
module 定义.Idl 文件中的库块。
ms_union 控制非封装联合的网络数据表示形式对齐。
no_injected_text 防止编译器由于使用属性而注入代码。
nonbrowsable 指示不应在属性浏览器中显示接口成员。
noncreatable 定义一个自身不能实例化的对象。
nonextensible 指定 IDispatch 实现仅包含接口说明中列出的属性和方法,并且不能在运行时使用其他成员进行扩展。
object 标识自定义接口;与自定义属性同义。
odl 将接口标识为对象说明语言 (ODL) 接口。
oleautomation 指示接口与自动化兼容。
optional 为成员函数指定可选参数。
out 标识从被调用过程返回到调用过程(从服务器到客户端)的指针参数。
pointer_default 指定除参数列表中显示的顶级指针以外的所有指针的默认指针属性。
pragma 将不带引号字符的指定字符串发送到生成的 .idl 文件中。
progid 为 COM 对象指定 ProgID。
propget 指定属性访问器 (get) 函数。
propputref 指定使用引用而不是值的属性设置函数。
propput 指定属性设置功能。
ptr 将指针指定为全指针。
公共 确保 typedef 将进入类型库,即使它没有从 .idl 文件中引用。
range 指定在运行时设置其值的参数或字段的允许值范围。
readonly 禁止对变量赋值。
ref 标识引用指针。
requestedit 指示该属性支持 OnRequestEdit 通知。
restricted 指定不能任意调用库或模块、接口或调度接口的成员。
retval 指定接收成员返回值的参数。
size_is 指定为大小指针、大小指针指向大小指针以及一维或多维数组分配的内存大小。
指示类、属性或方法的成员是事件源。
字符串 指示必须将一维的 charwchar_tbyte 或等效数组或者指向此类数组的指针视为字符串。
switch_is 指定用作选择联合成员的联合判别符的表达式或标识符。
switch_type 标识用作联合判别符的变量的类型。
transmit_as 指示编译器将客户端和服务器应用程序操作的呈现类型与传输的类型相关联。
uidefault 指示类型信息成员是在用户界面中显示的默认成员。
unique 指定唯一指针。
usesgetlasterror 告知调用方,如果在调用该函数时出错,则调用方可以调用 GetLastError 以检索错误代码。
uuid 指定类或接口的唯一 ID。
v1_enum 指示将指定的枚举类型作为 32 位实体传输而不是默认 16 位传输。
vararg 指定该函数采用的参数数目可变。
vi_progid 指定与版本无关的 ProgID 形式。
wire_marshal 指定将用于传输而不是特定于应用程序的数据类型的数据类型。

另请参阅

按组分的特性