local 特性
[local] 属性向 MIDL 编译器指定接口或函数不是远程的。
[
local
[, interface-attribute-list]
]
interface interface-name
{
}
[
object,
uuid(string-uuid),
local [, interface-attribute-list]
]
interface interface-name
{
}
[ local [, function-attribute-list] ] function-declarator ;
-
interface-attribute-list
-
指定应用于接口的其他属性作为一个整体。 属性 [endpoint]、 [version] 和 [pointer_default] 是可选的。 使用 /app_config 开关进行编译时,也可以存在 [implicit_handle] 或 [auto_handle]。 用逗号分隔多个属性。
-
interface-name
-
指定软件组件可描述接口的名称。
-
string-uuid
-
指定 Uuidgen 实用工具生成的 UUID 字符串。 如果不使用 MIDL 编译器开关 /osf,则可以将 UUID 字符串括在引号中。
-
function-attribute-list
-
指定应用于函数的零个或多个属性。 有效的函数属性为 [callback];指针属性 [ref]、[unique]或 [ptr];以及用法属性 [string]、[ignore]和 [context_handle]。 用逗号分隔多个属性。
-
function-declarator
-
指定函数的类型说明符、函数名称和参数列表。
[local] 属性可以应用于单个函数或整个接口。
在接口标头中使用时, [local] 属性允许将 MIDL 编译器用作标头生成器。 编译器不会为任何函数生成存根,也不确保可以传输标头。
对于 RPC 接口, [local] 属性不能与 [uuid] 属性同时使用。 接口标头中必须存在 [uuid] 或 [local] ,而你选择的接口标头必须恰好出现一次。
对于由 [object] 接口属性) 标识的 COM 接口 (,即使存在 [uuid] 属性,接口属性列表也可以包含 [local] 属性。
在单个函数中使用时, [local] 属性指定不为其生成存根的本地过程。 使用 [local] 作为函数属性是 DCE IDL 的 Microsoft 扩展。 因此,在使用 MIDL /osf 开关进行编译时,此属性不可用。
请注意,没有属性的接口可以导入到基本 IDL 文件中。 但是,接口必须仅包含没有过程的数据类型。 如果 接口中甚至包含一个过程,则必须指定本地或 UUID 属性。
/* IDL file #1 */
[
local
]
interface local_procs
{
void MyLocalProc(void);
}
/* IDL file #2 */
[
object,
uuid(12345678-1234-1234-123456789ABC),
local
]
interface local_object_procs : IUnknown
{
void MyLocalObjectProc(void);
}
/* IDL file #3 */
[
uuid(87654321-1234-1234-123456789ABC)
]
interface mixed_procs
{
[local] void MyLocalProc(void);
HRESULT MyRemoteProc([in] short sParam);
}