다음을 통해 공유


Application-Allocated 버퍼

ACF 특성 [byte_count]은 클라이언트 지원 루틴에 의해 할당되거나 해제되지 않은 미리 할당된 버퍼를 사용하도록 스텁에 지시합니다. [byte_count] 특성은 버퍼를 가리키는 포인터 또는 배열 매개 변수에 적용됩니다. 버퍼 크기를 바이트 단위로 지정하는 매개 변수가 필요합니다.

클라이언트 할당 메모리 영역에는 여러 포인터가 있는 복잡한 데이터 구조가 포함될 수 있습니다. 메모리 영역이 연속적이므로 애플리케이션은 각 포인터와 구조를 개별적으로 해제하기 위해 여러 번의 호출을 할 필요가 없습니다. [allocate(all_nodes)] 특성을 사용할 때와 마찬가지로 메모리 할당 루틴 또는 자유 루틴에 대한 한 번의 호출로 메모리 영역을 할당하거나 해제할 수 있습니다. 그러나 [allocate(all_nodes)] 특성을 사용하는 것과 달리 버퍼 매개 변수는 클라이언트 스텁이 아니라 클라이언트 애플리케이션에서 관리합니다.

버퍼는 []전용 매개 변수여야 하며 버퍼 길이(바이트)는]전용 매개 변수의 [이어야 합니다. [byte_count] 특성은 포인터 형식에만 적용할 수 있습니다. [byte_count] ACF 특성은 DCE IDL에 대한 Microsoft 확장이므로 MIDL /osf 스위치를 사용하여 컴파일하는 경우 사용할 수 없습니다.

다음 예제에서 매개 변수 pRoot 바이트 수를 사용합니다.

/* function prototype in IDL file (fragment) */
void SortNames(
    [in] short cNames,
    [in, size_is(cNames)] STRINGTYPE pszArray[],
    [in] short cBytes,
    [out, ref] P_TREE_TYPE pRoot  /* tree with sorted data */
);

[byte_count] 특성은 ACF에 다음과 같이 표시됩니다.

/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);

이러한 IDL 및 ACF 파일에서 생성된 클라이언트 스텁은 이 버퍼에 대한 메모리를 할당하거나 해제하지 않습니다. 서버 스텁은 제공된 크기 매개 변수를 사용하여 단일 호출에서 버퍼를 할당하고 해제합니다. 데이터가 지정된 버퍼 크기에 비해 너무 크면 예외가 발생합니다.