共用方式為


方向 (參數) 屬性

方向屬性描述數據是從用戶端傳輸至伺服器、伺服器到客戶端,還是兩者。 函式原型中的所有參數都必須與方向屬性相關聯。 方向屬性的三種可能組合為: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,只有 [in] 。 其值會傳送至遠端電腦,但不會傳回呼叫程式。 雖然伺服器應用程式可以變更 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傳回時,會修改第二個和第三個參數。 第一個參數只有 [] 中的 [],不會變更。

參數

參數

輸出參數