方向(参数)属性

方向属性描述数据是从客户端传输到服务器、服务器还是同时传输给客户端。 函数原型中的所有参数都必须与方向属性相关联。 方向属性的三种可能组合包括: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返回时,将修改第二个和第三个参数。 第一个参数,即 [] 中的 [] 不变。

参数

参数

传入参数