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