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 构造。 此属性以及 importlib 和 includelib 等其他属性可帮助你在当前 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 | 指定为大小指针、大小指针指向大小指针以及一维或多维数组分配的内存大小。 |
源 | 指示类、属性或方法的成员是事件源。 |
字符串 | 指示必须将一维的 char 、wchar_t 、byte 或等效数组或者指向此类数组的指针视为字符串。 |
switch_is | 指定用作选择联合成员的联合判别符的表达式或标识符。 |
switch_type | 标识用作联合判别符的变量的类型。 |
transmit_as | 指示编译器将客户端和服务器应用程序操作的呈现类型与传输的类型相关联。 |
uidefault | 指示类型信息成员是在用户界面中显示的默认成员。 |
unique | 指定唯一指针。 |
usesgetlasterror | 告知调用方,如果在调用该函数时出错,则调用方可以调用 GetLastError 以检索错误代码。 |
uuid | 指定类或接口的唯一 ID。 |
v1_enum | 指示将指定的枚举类型作为 32 位实体传输而不是默认 16 位传输。 |
vararg | 指定该函数采用的参数数目可变。 |
vi_progid | 指定与版本无关的 ProgID 形式。 |
wire_marshal | 指定将用于传输而不是特定于应用程序的数据类型的数据类型。 |