oleautomation 特性
oleautomation 属性指示接口与自动化兼容。
[
oleautomation,
uuid(string-uuid)
[ , interface-attribute-list]
]
interface interface-name : base-interface
{
...
}
-
string-uuid
-
指定 Uuidgen 实用工具生成的 UUID 字符串。
-
interface-attribute-list
-
指定应用于接口的其他属性作为一个整体。
-
interface-name
-
指定接口的名称。
-
base-interface
-
指定自动化接口的名称,此派生接口从中继承成员函数、状态代码和接口属性。 所有自动化接口都派生自 IUnknown 或 IDispatch。
为 [oleautomation] 接口的成员指定的参数和返回类型必须与自动化兼容,如下表所示。
类型 | 说明 |
---|---|
boolean | 可将值VARIANT_TRUE或VARIANT_FALSE的数据项。 大小对应于VARIANT_BOOL。 |
unsigned char | 8 位无符号数据项。 |
double | 64 位 IEEE 浮点数。 |
float | 32 位 IEEE 浮点数。 |
int | 带符号整数,其大小与系统相关。 在 32 位平台上,MIDL 将 int 视为 32 位有符号整数。 |
long | 32 位带符号整数。 |
short | 16 位有符号整数。 |
BSTR | 长度前缀字符串,如自动化主题 BSTR 中所述。 |
CURRENCY | 8 字节,固定浮点数。 |
DATE | 自 1899 年 12 月 30 日以来的 64 位浮点小数天。 |
SCODE | 对于 16 位系统,与VT_ERROR对应的内置错误类型。 |
Typedef 枚举â myenum | 带符号整数,其大小与系统相关。 |
接口 IDispatch * | 指向 IDispatch 接口 (VT_DISPATCH) 的指针。 |
接口 IUnknown * | 指向不从 IDispatch (VT_UNKNOWN) 派生的接口的指针。 (任何 OLE 接口都可以由其 IUnknown interface 表示) |
dispinterfaceâ Typename * | 指向派生自 IDispatch (VT_DISPATCH) 的接口的指针。 |
Coclassâ Typename * | 指向 coclass 名称 (VT_UNKNOWN) 的指针。 |
[oleautomation] 接口â Typename * | 指向派生自 IUnknown 的接口的指针。 |
SAFEARRAY (TypeName) | TypeName 是上述任何类型。 这些类型的数组。 |
TypeName * | TypeName 是上述任何类型。 指向类型的指针。 |
十进制 | 按 10 的可变幂缩放的 96 位无符号二进制整数。 一种十进制数据类型,为数字 (提供大小和刻度,如坐标) 。 |
如果参数的类型是自动化兼容类型、指向与自动化兼容的类型的指针或与自动化兼容的类型的 SAFEARRAY,则参数与自动化兼容。
如果返回类型为 HRESULT、SCODE 或 void,则返回类型与自动化兼容。 但是,MIDL 要求接口方法返回 HRESULT 或 SCODE。 返回 void 会生成编译器错误。
如果成员的返回类型及其所有参数都与自动化兼容,则其与自动化兼容。
如果接口派生自 IDispatch 或 IUnknown,则其具有 [oleautomation] 属性,并且其所有 VTBL 条目都与自动化兼容。 对于 32 位平台,接口中所有方法的调用约定必须为 STDCALL。 对于 16 位系统,所有方法都必须具有 CDECL 调用约定。
每个 dispinterface 都隐式兼容自动化。 因此,不应在 dispinterface 上使用 [oleautomation] 属性。
使用 MIDL 编译器 /osf 开关进行编译时,[oleautomation] 属性不可用。
TYPEFLAG_FOLEAUTOMATION
library Hello
{
importlib("stdole32.tlb");
[
uuid(12345678-1234-1234-1234-123456789ABC),
helpstring("Application object for the Hello application."),
oleautomation,
dual
]
interface IHello : IDispatch
{
// Interface definition statements.
}
// Other library definition statements.
}