方向 (參數) 屬性

方向屬性描述資料是從用戶端傳輸至伺服器、伺服器到用戶端,還是兩者。 函式原型中的所有參數都必須與方向屬性相關聯。 三個可能的方向屬性組合包括:1 個) [in]、2 個) [out],以及 3 個) [inout]。 這些描述在呼叫和呼叫程式之間傳遞參數的方式。 當您在預設 (Microsoft 擴充模式) 編譯,而且省略參數的方向屬性時,MIDL 編譯器會假設預設值為 [in]。

[out] 參數必須是指標。 事實上,當套用至不做為指標的參數時,[out] 屬性並不有意義,因為 C 函式參數會以傳值方式傳遞。 在 C 中,呼叫的函式會收到參數值的私人複本;它無法變更該參數的呼叫函式值。 不過,如果參數做為指標,它可以用來存取和修改記憶體。 [out] 屬性工作表示伺服器函式應該將值傳回給用戶端的呼叫函式,而且與指標相關聯的記憶體應該根據指派給指標的屬性傳回。

下列介面示範可套用至參數之方向屬性的三個可能組合。 InOutProc函式會在 IDL 檔案中定義為:

void InOutProc ([in]       short     s1,
                [in, out]  short *  ps2,
                [out]      float *  pf3);

第一個參數 s1僅限 [in]。 其值會傳送至遠端電腦,但不會傳回給呼叫程式。 雖然伺服器應用程式可以變更 s1的值,但用戶端上的 s1 值在呼叫前後相同。

第二個參數 ps2會在函式原型中定義為指標,其中包含 [in] 和 [out] 屬性。 [in] 屬性工作表示參數的值是從用戶端傳遞至伺服器。 [out] 屬性工作表示 ps2 所指向的值會傳回給用戶端。

第三個參數僅限 [out]。 空間會配置給伺服器上的 參數,但在專案上未定義值。 如上所述,所有 [out] 參數都必須是指標。

遠端程式會變更這三個參數的值,但用戶端只能使用 [out] 和 [in] 參數的新值。

#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傳回時,會修改第二個和第三個參數。 只有 [in] 的第一個參數不會變更。

參數中的

out 參數

in-out 參數