使用英语阅读

通过


object 特性

[object] 接口属性标识 COM 接口。 (不包括 [object] 属性的接口属性列表指示 DCE RPC interface.)

[ 
    object, 
    uuid(string-uuid)
    [ , interface-attribute-list] 
] 
interface interface-name : base-interface
{
...    
}

parameters

string-uuid

由 Uuidgen 实用工具生成的 UUID 字符串。 可以将 UUID 字符串括在引号中。

interface-attribute-list

应用于接口的其他属性作为一个整体。

interface-name

接口的名称。

base-interface

从中派生此接口的 COM 接口。 基接口必须是 IUnknownIDispatch 或其他直接或间接派生自 IUnknownIDispatch 的 COM 接口。

备注

COM 接口的接口属性列表必须包含 [uuid] 属性,但不能包含 [version] 属性。

默认情况下,使用 MIDL 编译器编译 COM 接口会生成生成代理 DLL 所需的文件。 此 DLL 包含用于支持客户端应用程序和对象服务器使用自定义 COM 接口的代码。 但是,如果 COM 接口的接口属性列表指定 [local] 属性,则 MIDL 编译器仅生成接口头文件。

MIDL 编译器自动生成 COM 接口的接口数据类型。 作为替代方法,可以将 typedef接口关键字 (keyword) 一起使用,以显式定义接口数据类型。 然后,接口规范可以在函数参数和返回值、结构和联合成员以及其他类型声明中使用接口数据类型。 以下示例演示如何使用自动生成的 IStream 数据类型:

[
    object, 
    uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
] 
interface IStream : IUnknown
{ 
    typedef IStream * LPSTREAM; 
    // Other interface definition statements.
}

在 COM 接口中,所有接口成员函数都假定为虚拟函数。 虚拟函数将隐式 指针作为第一个参数。 虚拟函数表包含每个接口成员函数的条目。

[local] 对象接口成员函数的返回值必须为 HRESULT 或 SCODE。 (请注意,早期版本的 MIDL 允许成员函数返回 void。但是,从 MIDL 版本 3.0 开始,返回 void 会生成编译器错误。) 返回值为 HRESULT 或 SCODE 意味着如果在远程调用期间生成异常,则生成的代理会捕获异常并在返回值中返回异常代码。 如果应用程序能够忽略远程过程调用期间发生的错误,则可以将 HRESULT 指定为返回类型,而无需在调用后检查返回值。

如果要重新编译旧应用程序,则当服务器将新引入的结果发送到客户端时,更改返回类型可能会导致向后兼容性问题。 作为更改返回类型的替代方法,可以使用 [call_as] 属性标记返回 void 的函数,从而使其成为本地函数。 然后,定义具有相同参数但返回类型为 HRESULT 的相关远程函数。 如有必要,本地函数可以根据该 HRESULT 值引发异常。

使用 MIDL 编译器 /osf 开关进行编译时,[object] 属性不可用。

示例

[
    uuid(12345678-1234-1234-1234-123456789ABC), 
    object
] 
interface IMyInterface : IUnknown
{
    // Interface definition statements.
}

[
    uuid(87654321-1234-1234-1234-123456789ABC), 
    object, 
    local
] 
interface ILocalInterface : ISomeOldCOMInterface
{
    // Interface definition statements.
}

另请参阅

call_as

接口定义 (IDL) 文件

iid_is

接口

当地

/osf

typedef

uuid

版本