unique 특성
[unique] 특성은 고유한 포인터를 지정합니다.
pointer_default(unique)
typedef [ unique [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef struct-or-union-declarator
{
[ unique [[ , field-attribute-list ]] ] type-specifier declarator-list;
...}
[ unique [[ , function-attribute-list ]] ] type-specifier ptr-decl function-name(
[[ [ parameter-attribute-list ] ]] type-specifier [[declarator]]
, ...);
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ unique [[ , parameter-attribute-list ]] ] type-specifier [[declarator]]
, ...);
-
type-attribute-list
-
형식에 적용되는 하나 이상의 특성을 지정합니다. 유효한 형식 특성에는 [핸들], [switch_type], [transmit_as]이 포함됩니다. 포인터 특성 [ref], [unique]또는 [ptr]; 및 사용 특성 [context_handle], [문자열] 및 [무시]. 여러 특성을 쉼표로 구분합니다.
-
type-specifier
-
기본 형식, 구조체, 공용 구조체, 열거형 형식 또는 형식 식별자를 지정합니다. 선택적 스토리지 사양은 형식 지정자보다 우선할 수 있습니다.
-
declarator 및 declarator-list
-
식별자, 포인터 선언자 및 배열 선언자와 같은 표준 C 선언자를 지정합니다. 자세한 내용은 배열 및 Sized-Pointer 특성, 배열, 배열 및 포인터를 참조하세요. declarator-list는 쉼표로 구분된 하나 이상의 선언자로 구성됩니다. 함수 선언자의 매개 변수 이름 식별자는 선택 사항입니다.
-
struct-or-union-declarator
-
field-attribute-list
-
구조체 멤버, 공용 구조체 멤버 또는 함수 매개 변수에 적용되는 0개 이상의 필드 특성을 지정합니다. 유효한 필드 특성에는 [first_is], [last_is], [length_is], [max_is], [size_is]이 포함됩니다. 사용 특성 [string], [ignore] 및 [context_handle]; 포인터 특성 [ref], [unique]또는 [ptr]; 및 union 특성 [switch_type]. 여러 필드 특성을 쉼표로 구분합니다.
-
function-attribute-list
-
함수에 적용되는 0개 이상의 특성을 지정합니다. 유효한 함수 특성은 [콜백], [로컬]입니다. 포인터 특성 [ref], [unique]또는 [ptr]; 및 사용 특성 [string], [ignore] 및 [context_handle].
-
ptr-decl
-
[unique] 특성이 적용되는 포인터 선언자를 하나 이상 지정합니다. 포인터 선언자는 C에서 사용되는 포인터 선언자와 동일합니다. * 지정자, 멀리와 같은 한정자 및 한정자 const에서 생성됩니다.
-
function-name
-
원격 프로시저의 이름을 지정합니다.
-
parameter-attribute-list
-
지정된 매개 변수 형식에 적합한 0개 이상의 특성으로 구성됩니다. 매개 변수 특성은 [in] 및 [out] 방향 특성을 사용할 수 있습니다. 필드 특성 [first_is], [last_is], [length_is], [max_is], [size_is] 및 [switch_type]; 포인터 특성 [ref], unique 또는 ptr; 및 사용 특성 [context_handle] 및 [string]. 사용 특성 [ignore] 는 매개 변수 특성으로 사용할 수 없습니다. 여러 특성을 쉼표로 구분합니다.
포인터 특성을 형식 특성으로 적용할 수 있습니다. 구조체 멤버, 공용 구조체 멤버 또는 매개 변수에 적용되는 필드 특성으로, 또는 함수 반환 형식에 적용되는 함수 특성입니다. 포인터 특성은 [pointer_default] 키워드(keyword) 함께 표시할 수도 있습니다.
고유한 포인터에는 다음과 같은 특성이 있습니다.
- NULL 값을 가질 수 있습니다.
- NULL에서 NULL이 아닌 값으로, NULL이 아닌 값에서 NULL이 아닌 값으로 호출하는 동안 변경할 수 있습니다.
- 클라이언트에 새 메모리를 할당할 수 있습니다. 고유 포인터가 NULL에서 비 NULL로 변경되면 서버에서 반환된 데이터가 새 스토리지에 기록됩니다.
- 새 메모리를 할당하지 않고 클라이언트에서 기존 메모리를 사용할 수 있습니다. NULL이 아닌 한 값에서 다른 값으로 호출하는 동안 고유한 포인터가 변경되면 포인터는 동일한 형식의 데이터 개체를 가리키는 것으로 간주됩니다. 서버에서 반환된 데이터는 호출 전에 고유 포인터의 값으로 지정된 기존 스토리지에 기록됩니다.
- 클라이언트에서 메모리를 분리할 수 있습니다. NULL이 아닌 고유 포인터에서 참조하는 메모리는 호출 중에 고유 포인터가 NULL로 변경되고 클라이언트에 스토리지를 역참조하는 다른 수단이 없는 경우 해제되지 않을 수 있습니다.
- 별칭을 발생시키지 않습니다. 참조 포인터가 가리키는 스토리지와 마찬가지로 고유한 포인터로 가리키는 스토리지는 함수의 다른 이름에서 연결할 수 없습니다.
스텁은 midl_user_allocate 사용자가 제공한 메모리 관리 함수를 호출하고 midl_user_free 고유한 포인터 및 참조에 필요한 메모리 를 할당 및 할당 취소합니다.
고유 포인터에는 다음 제한이 적용됩니다.
- 바인딩 핸들 매개 변수( handle_t) 및 컨텍스트 핸들 매개 변수에는 [unique] 특성을 적용할 수 없습니다.
- [unique] 특성은 [out] 전용 최상위 포인터 매개 변수([out] 방향 특성만 있는 매개 변수)에 적용할 수 없습니다.
- 기본적으로 매개 변수 목록의 최상위 포인터는 [ref] 포인터입니다. 인터페이스가 pointer_default(고유)을 지정하는 경우에도 마찬가지입니다. 매개 변수 목록의 최상위 매개 변수는 고유 포인터가 되도록 [unique] 특성으로 지정해야 합니다.
- 고유 포인터는 NULL 값을 가질 수 있으므로 배열 또는 공용 구조체 암의 크기를 설명하는 데 사용할 수 없습니다. 이 제한은 NULL 값이 배열 크기 또는 union-arm 크기로 사용되는 경우 발생하는 오류를 방지합니다.
pointer_default(unique)
typedef [unique, string] unsigned char * MY_STRING_TYPE;
[unique] char * MyFunction([in, out, unique] long * plNumber);