callback 属性
[callback] 属性声明分布式应用程序的客户端上存在的静态回调函数。 回调函数为服务器提供了一种在客户端上执行代码的方法。
[callback [ , function-attr-list] ] type-specifier [ptr-declarator] function-name(
[ [attribute-list] ] type-specifier [declarator]
, ...);
-
function-attr-list
-
指定应用于函数的零个或多个属性。 有效的函数属性为 [local];指针属性 [ref]、[unique]或 [ptr];以及用法属性 [string]、[ignore]和 [context_handle]。 用逗号分隔多个属性。
-
type-specifier
-
ptr-declarator
-
指定零个或多个指针声明符。 指针声明符与 C 中使用的指针声明符相同;它由 * 指示符、修饰符(如 far)和限定符 const 构造。
-
function-name
-
指定远程过程的名称。
-
attribute-list
-
指定适用于指定参数类型的零个或多个方向属性、字段属性、用法属性和指针属性。 用逗号分隔多个属性。
-
declarator
-
指定标准 C 声明符,例如标识符、指针声明符和数组声明符。 有关详细信息,请参阅 数组和Sized-Pointer属性、 数组和 数组和指针。 参数名称标识符是可选的。
当服务器必须从客户端获取信息时, [callback] 函数非常有用。 如果 Windows 3 支持服务器应用程序。x,服务器可以调用 Windows 3 上的远程过程。用于 获取所需信息的 x 服务器。 回调函数可实现相同的目的,并允许服务器在原始调用的上下文中查询客户端信息。
回调是作为单个线程的一部分执行的远程调用的特殊情况。 在远程调用的上下文中发出回调。 定义为静态回调函数同一接口的一部分的任何远程过程都可以调用回调函数。
请务必注意,不建议在多线程编程中使用 [callback]。 作为单线程编程函数,它无法支持多线程环境提供的安全要求。
RpcCancelThread 函数不能用于取消可能调度静态回调的调用。 如果特定的远程过程调用永远不会导致回调,则可以取消回调。 否则,仅当可以保证未为其发出回调时,才能取消调用。
只有面向连接的本地协议序列支持回调属性。 针对本地协议序列的回调的 [out] 数据的大小限制为 150 字节。 如果 RPC 接口使用无连接 (数据报) 协议序列,则调用具有回调属性的过程将失败。
句柄不能用作回调函数中的参数。 由于回调始终在调用的上下文中执行,因此客户端用于对服务器的调用的绑定句柄也用作从服务器到客户端的绑定句柄。
回调可以嵌套到任何深度。
[callback] HRESULT DisplayString([in, string] char * p1);