length_is 특성
[length_is] 특성은 전송할 배열 요소의 수를 지정합니다. 음수가 아닌 값을 지정해야 합니다.
[length_is( limited-expression-list )]
-
limited-expression-list
-
하나 이상의 C 언어 식을 지정합니다. 각 식은 전송할 배열 요소의 수를 나타내는 정수로 평가됩니다. MIDL 컴파일러는 조건식, 논리 식, 관계형 식 및 산술 식을 지원합니다. MIDL은 식에서 함수 호출을 허용하지 않으며 증가 및 감소 연산자를 허용하지 않습니다. 여러 식을 쉼표로 구분합니다.
[length_is] 특성은 [last_is]이 지정되지 않은 경우 [last_is] 특성에 해당하는 배열 인덱스의 값을 결정합니다. 이러한 배열 인덱스 간의 관계는 다음과 같습니다. length = last - first + 1.
[length_is] 특성은 [last_is] 특성 또는 [string] 특성과 동시에 사용할 수 없습니다.
[length_is] 또는 [last_is] 특성으로 계산된 문자열을 정의하려면 [string] 특성 없이 문자 배열 또는 포인터를 사용합니다.
[length_is] 특성과 함께 상수 식을 사용하는 것은 특성의 부적절한 사용입니다. 합법적이지만 비효율적이며 코드 마샬링 속도가 느려집니다.
[size_is] 및 [length_is] 특성을 함께 사용할 수 있습니다. 이렇게 하면 [size_is] 특성이 데이터에 할당된 메모리 양을 제어합니다. [length_is] 특성은 전송되는 요소 수를 지정합니다. [size_is] 및 [length_is] 특성에서 지정한 메모리 양은 동일하지 않아도 됩니다. instance 경우 클라이언트는 [length_is]와 함께 전달할 소수의 데이터 요소를 지정하더라도 서버에 [in, out] 매개 변수를 전달하고 [size_is]을 사용하여 대용량 메모리 할당을 지정할 수 있습니다. 이렇게 하면 서버가 받은 것보다 많은 데이터로 배열을 채울 수 있으며, 그러면 클라이언트로 다시 보낼 수 있습니다.
일반적으로 [in]또는 [out] 매개 변수에 [size_is] 및 [length_is]를 모두 지정하는 것은 유용 하지 않습니다. 두 경우 모두 [size_is] 는 메모리 할당을 제어합니다. 애플리케이션 은 [size_is] 을 사용하여 전송하는 것보다 더 많은 배열 요소를 할당할 수 있습니다( [length_is]에 지정된 대로). 그러나 이는 비효율적입니다. [size_is] 및 [length_is]에 대해 동일한 값을 지정하는 것도 비효율적입니다. 매개 변수 마샬링 중에 추가 오버헤드가 생성되기 때문입니다. [size_is] 및 [length_is]의 값이 항상 같으면 [length_is] 특성을 생략합니다.
/* counted string holding at most "size" characters */
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} COUNTED_STRING_TYPE;
/* counted string holding at most 80 characters */
typedef struct
{
unsigned short length;
[length_is(length)] char string[80];
} STATIC_COUNTED_STRING_TYPE;
HRESULT Proc1(
[in] short iLength;
[in, length_is(iLength)] short asNumbers[10]);