方向(参数)属性
方向属性描述数据是从客户端传输到服务器、服务器还是同时传输给客户端。 函数原型中的所有参数都必须与方向属性相关联。 方向属性的三种可能组合包括:1) [], 2) [out], 3) [中的, out]。 这些说明在调用和调用过程之间传递参数的方式。 在默认(Microsoft扩展模式)中编译并省略参数的方向属性时,MIDL 编译器假定默认值为 [] 中的 []。
[out] 参数必须是指针。 事实上,当应用于不充当指针的参数时,[out] 属性没有意义,因为 C 函数参数通过值传递。 在 C 中,调用的函数接收参数值的私有副本;它无法更改该参数的调用函数的值。 但是,如果参数充当指针,则可用于访问和修改内存。 [out] 属性指示服务器函数应将值返回到客户端的调用函数,并且应根据分配给指针的属性返回与指针关联的内存。
以下接口演示了可应用于参数的方向属性的三种可能组合。 函数 InOutProc 在 IDL 文件中定义为:
void InOutProc ([in] short s1,
[in, out] short * ps2,
[out] float * pf3);
第一个参数,s1,仅为 [] 中的。 其值将传输到远程计算机,但不会返回到调用过程。 尽管服务器应用程序可以更改 s1的值,但客户端上 s1 的值在调用前后相同。
第二个参数(ps2)在函数原型中定义为指针,该指针具有 [in] 和 [out] 属性。 ] 属性中的 [指示参数的值从客户端传递到服务器。 [out] 属性指示 ps2 指向的值将返回到客户端。
第三个参数仅为 [out] 。 为服务器上的参数分配空间,但在条目上未定义该值。 如上所述,所有 [out] 参数都必须是指针。
远程过程将更改所有三个参数的值,但客户端只能使用 [out] 和 [] 参数的新值。
#define MAX 257
void InOutProc(short s1,
short * ps2,
float * pf3)
{
*pf3 = (float) s1 / (float) *ps2;
*ps2 = (short) MAX - s1;
s1++; // in only; not changed on the client side
return;
}
从调用 inOutProc返回时,将修改第二个和第三个参数。 第一个参数,即 [] 中的 [] 不变。
参数
参数
传入参数