여러 수준의 포인터

여러 수준의 포인터가 있는 경우 특성은 변수 이름에 가장 가까운 포인터와 연결됩니다. 클라이언트는 응답과 연결된 메모리를 할당해야 합니다.

다음 예제에서는 스텁이 반환되는 데이터의 양을 미리 알지 못하고 서버를 호출할 수 있습니다.

[
    uuid( ...),
    version(3.3),
]
interface AnInterface
{
    HRESULT GetBars([out] long * pSize,
             [out, size_is( , *pSize)]
             BAR ** ppBar);//BAR type defined elsewhere
}

이 예제에서 스텁은 서버가 NULL로 초기화하는 고유한 포인터를 서버에 전달합니다. 그런 다음 서버는 BAR 블록을 할당하고, 포인터를 설정하고, size 인수를 설정하고, 를 반환합니다. 서버가 호출자에 영향을 주려면 데이터에 대한 [고유] 포인터에 [ref] 포인터를 전달해야 합니다. 또한 최상위 포인터가 크기가 작은 포인터가 아니라 하위 수준 포인터임을 나타내는 [size_is( , *pSize )]의 쉼표도 확인합니다.

클라이언트 쪽에서 스텁은 원격 프로시저를 호출하기 전에 *ppBar를 NULL 로 설정합니다. 그런 다음 스텁은 BAR 개체의 arry를 할당하고 숨기지 않습니다. size 인수는 블록의 크기(및 숨기지 않은 BAR 수)를 나타냅니다. 클라이언트는 더 이상 필요하지 않은 경우 반환된 BAR 개체 배열을 해제해야 합니다.

size_is