다양한 배열

MIDL에서는 다양한 배열의 크기가 고정됩니다. 클라이언트에서 서버로 배열의 다른 부분을 전달할 수 있습니다. 배열 부분의 크기는 호출마다 다를 수 있습니다. 그러나 전체 배열의 크기는 고정되어 있습니다.

예를 들어 다음 예제에서는 MIDL 파일의 인터페이스에 있는 원격 프로시저의 정의를 보여줍니다. 클라이언트가 서버에 전달하는 배열의 크기는 상수 ARRAY_SIZE 의해 고정됩니다. 인터페이스는 클라이언트가 첫 번째Element 및 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을 두 번 호출합니다. 첫 번째 호출에서 첫 번째ArrayElementNumber 및 totalElementsPassed 변수의 값으로 표시된 대로 20에서 119까지 번호가 매겨진 배열 요소를 전달합니다. 두 번째 호출에서 클라이언트는 120에서 319까지 번호가 매겨진 배열 요소를 전달합니다.