不同的陣列
在 MIDL 中,不同的陣列大小是固定的。 它們可讓用戶端將陣列的不同部分從用戶端傳遞至伺服器。 陣列部分的大小可能會因調用而異。 不過,整體陣列的大小是固定的。
例如,下列範例顯示 MIDL 檔案中介面中遠端程式的定義。 用戶端傳遞給伺服器的陣列大小是由常數ARRAY_SIZE所修正。 介面會指定用戶端在參數 firstElement 和 chunkSize 中傳遞至伺服器的陣列部分。
[
/*Attributes are defined here. */
]
interface MyInterface
{
const long ARRAY_SIZE = 1000;
MyRemoteProc(
[in] long lFirstElement,
[in] long lChunkSize,
[in, first_is(lFirstElement),
length_is(lChunkSize)] char achArray[ARRAY_SIZE]
);
/* Other interface procedures are defined here. */
}
介面定義會使用 MIDL 屬性 [first_is] 來指定用戶端傳遞至伺服器之陣列部分中第一個專案的索引編號。 [length_is] 屬性會指定用戶端傳遞的陣列元素總數。 如需這些 MIDL 屬性的詳細資訊,請參閱 陣列屬性。
下列程式碼片段說明用戶端如何叫用上述 MIDL 檔案中定義的遠端程式。
long lFirstArrayElementNumber = 20;
long lTotalElementsPassed = 100;
char achCharArray[ARRAY_SIZE];
// Code to store chars in the array goes here.
MyRemoteProc(
lFirstArrayElementNumber ,
lTotalElementsPassed ,
achCharArray);
firstArrayElementNumber = 120;
totalElementsPassed = 200;
MyRemoteProc(
lFirstArrayElementNumber ,
lTotalElementsPassed ,
achCharArray);
此片段會呼叫遠端程式 MyRemoteProc 兩次。 在第一次叫用時,它會傳遞編號為 20 到 119 的陣列元素,如變數 firstArrayElementNumber 和 totalElementsPassed 中的值所表示。 第二次呼叫時,用戶端會傳遞編號為 120 到 319 的陣列元素。