다음을 통해 공유


partial_ignore 특성

ACF 특성 [partial_ignore] 은 선택적 의미 체계를 제공하는 특수한 버전의 [고유] 포인터를 정의합니다.

[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ partial_ignore [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);

설명

함수를 만들 때 사용자가 선택적 반환 데이터에 대한 NULL 이 아닌 포인터를 지정할 수 있도록 허용하는 것이 일반적입니다( 선택적 아웃 포인터라고도 함). 사용자가 가리키는 메모리는 일반적으로 초기화할 필요가 없습니다. 이 기술은 함수가 RPC를 통해 사용될 때의 문제를 나타냅니다.

선택적 아웃 포인터가 유효하지만 초기화되지 않은 데이터를 가리키는 경우 RPC는 해당 데이터를 마샬링하고 서버에 보내려고 시도하므로 마샬링이 실패하고 호출이 중단될 수 있습니다. 마샬링이 성공하더라도 잠재적으로 많은 양의 쓸모없는 데이터가 서버로 전송됩니다.

이러한 문제는 포인터를 [in, out, unique, partial_ignore]로 표시하여 해결됩니다. 네 가지 특성이 모두 있어야 합니다. 클라이언트 쪽에서 [partial_ignore] 포인터를 마샬링하면 서버로 전송되는 유일한 데이터는 포인터가 NULL인지 여부를 보여 주는 지표입니다. 포인터가 NULL이 아닌 경우 서버 쪽 루틴은 0으로 초기화된 메모리 블록에 대한 유효한 포인터를 받습니다. 포인터가 NULL이면 서버 쪽 루틴은 NULL 포인터를 받습니다.

이 경우 서버가 가리키는 메모리 위치에 공간을 할당해야 하므로 컴파일 시간에 또는 입력 매개 변수를 기반으로 포인터의 최대 크기를 잘 정의해야 합니다. 예를 들어 문자열이 NULL 문자에 의해 암시적으로 종료되므로 간단한 [문자열] 포인터의 크기가 잘 정의되지 않습니다. 이 경우 [size_is] 특성을 추가하여 문자열의 최대 크기를 지정하면 잘 정의된 크기 요구 사항이 충족됩니다.

/* The MoveLeft function will move one position to the left and optionally return the previous position */
void MoveLeft([in, out, unique, partial_ignore] long *pPrevPosition);

참고 항목

고유