여러 수준의 포인터가 있는 경우 특성은 변수 이름에 가장 가까운 포인터와 연결됩니다. 클라이언트는 응답과 연결된 모든 메모리를 할당해야 합니다.
다음 예제에서는 스텁에서 반환되는 데이터의 양을 미리 알지 못하고 서버를 호출할 수 있습니다.
[
uuid( ...),
version(3.3),
]
interface AnInterface
{
HRESULT GetBars([out] long * pSize,
[out, size_is( , *pSize)]
BAR ** ppBar);//BAR type defined elsewhere
}
이 예제에서 스텁은 서버가 NULL 초기화하는 고유한 포인터를 서버에 전달합니다. 그런 다음 서버는 BAR 블록을 할당하고, 포인터를 설정하고, 크기 인수를 설정하고, 반환합니다. 서버가 호출자에 영향을 주려면 데이터에 대한 [고유] 포인터에 [ref] 포인터를 전달해야 합니다. 또한 [size_is(, *pSize )]의 쉼표는 최상위 포인터가 크기가 작은 포인터가 아니라 하위 수준 포인터임을 나타냅니다.
클라이언트 쪽에서 스텁은 원격 프로시저를 호출하기 전에 NULL *ppBar를 설정합니다. 그런 다음 스텁은 BAR 개체의 arry를 할당하고 숨깁니다. 크기 인수는 블록의 크기(및 숨겨지지 않은 BAR의 수)를 나타냅니다. 클라이언트는 더 이상 필요하지 않은 경우 반환된 BAR 개체 배열을 해제해야 합니다.
관련 항목