다음을 통해 공유


전체 포인터

고유 포인터와 달리 전체 포인터는 별칭 지정을 지원합니다. 즉, 다음 그림과 같이 여러 포인터가 동일한 데이터를 참조할 수 있습니다.

동일한 데이터를 참조하는 두 포인터

전체 포인터에는 다음과 같은 특성이 있습니다.

  • 값이 null일 수 있습니다.
  • 호출 중에 null에서 null이 아닌 값으로 변경할 수 있습니다. 값이 null이 아닌 값으로 변경되면 클라이언트 스텁은 반환 시 할당된 새 메모리를 할당합니다. 클라이언트 프로그램은 종료되기 전에 이 메모리를 해제해야 합니다.
  • 호출 중에 null이 아닌 에서 null로 변경할 수 있습니다. 값이 null로 변경되면 애플리케이션은 메모리를 해제해야 합니다.
  • 값은 null이 아닌 값에서 다른 값으로 변경할 수 있습니다.
  • 전체 포인터가 가리키는 스토리지는 작업의 다른 포인터 또는 이름으로 액세스할 수 있습니다.
  • 포인터에 null 값이 없으면 반환 데이터가 기존 스토리지에 기록됩니다.

다음 예제와 같이 [ ptr ] 특성을 사용하여 전체 포인터를 지정합니다.

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface FullPtrInterface
{
  void RemoteFn([in,ptr,string]) char *ptrName1,
                [in,ptr,string]  char *ptrName2);
}

이 예제에서는 ptrName1ptrName2 매개 변수가 문자열에 대한 전체 포인터로 정의됩니다. 두 포인터가 단일 문자열을 포함하는 동일한 메모리 주소를 가리킬 수 있습니다.

별칭 지원을 제공할 때는 [ptr]이 필요합니다. 그러나 RPC에서 사용할 수 있는 모든 포인터를 가장 많이 처리해야 하므로 대부분의 애플리케이션에는 권장되지 않습니다.