Share via


세 가지 포인터 형식

MIDL은 다양한 애플리케이션을 수용하기 위해 세 가지 유형의 포인터를 지원합니다. 세 가지 수준을 참조, 고유 및 전체 포인터라고 하며 각각 [ref], [unique][ptr] 특성으로 표시됩니다. 이러한 특성에서 설명하는 포인터 클래스는 상호 배타적입니다. 포인터 특성은 형식 정의, 함수 반환 형식, 함수 매개 변수, 구조체 또는 공용 구조체의 멤버 또는 배열 요소의 포인터에 적용할 수 있습니다.

포함된 포인터는 구조체 또는 공용 구조체의 멤버인 포인터입니다. 배열의 요소일 수도 있습니다. [in] 방향에서 포함된 [ref] 포인터는 유효한 스토리지를 가리키는 것으로 간주되며 null이 아니어야 합니다. 이 상황은 가리키는 모든 [ref] 포인터에 재귀적으로 적용할 수 있습니다. [in] 방향에서 포함된 [unique] 및 전체 포인터([ptr] 특성이 있는 포인터)는 null일 수도 있고 그렇지 않을 수도 있습니다.

함수 선언 구문의 매개 변수에 배치된 포인터 특성은 해당 매개 변수에 대한 가장 오른쪽 포인터 선언자에만 영향을 줍니다. 다른 포인터 선언자에 영향을 주려면 중간 명명된 형식을 사용해야 합니다.

포인터를 반환하는 함수는 포인터 특성을 함수 특성으로 사용할 수 있습니다. [unique][ptr] 특성은 함수 반환 형식에 적용해야 합니다. 포인터인 멤버 선언은 포인터 특성을 필드 특성으로 지정할 수 있습니다. 포인터 특성은 typedef 구문에서 형식 특성으로 적용할 수도 있습니다.

포인터 특성이 필드 또는 형식 특성으로 지정되지 않은 경우 다음과 같이 개체가 없는 포인터 선언에 대한 규칙에 따라 포인터 특성이 적용됩니다.

DCE 호환성 모드에서 포인터 특성은 정의 IDL 파일에서 결정됩니다. 정의 인터페이스에 지정된 [pointer_default**]**특성이 있는 경우 해당 특성이 사용됩니다. [pointer_default] 특성이 없으면 할당되지 않은 모든 포인터는 전체 포인터입니다.

Microsoft 확장 모드에서 포인터 특성은 IDL 파일을 가져와서 확인할 수 있으며 다음 순서로 적용됩니다.

  1. 사용 사이트에 적용된 명시적 포인터 특성입니다.
  2. 할당되지 않은 포인터가 최상위 포인터 매개 변수인 경우 [ref] 특성입니다.
  3. 정의 인터페이스에 지정된 [pointer_default] 특성입니다.
  4. 기본 인터페이스에 지정된 [pointer_default] 특성입니다.
  5. [고유] 특성입니다.

[pointer_default] 인터페이스 특성은 해당 선언에 명시적 포인터 특성이 적용되지 않은 경우 형식, 매개 변수 또는 반환 형식 선언의 포인터 선언자에 적용할 기본 포인터 특성을 지정합니다. [pointer_default] 인터페이스 특성은 [ref]로 간주되는 매개 변수의 할당되지 않은 최상위 포인터에는 적용되지 않습니다.