byte_count 특성
[byte_count] ACF 특성은 포인터로 표시된 메모리 영역과 크기를 바이트 단위로 연결하는 매개 변수 특성입니다.
[ function-attribute-list ] function-name(
[byte_count(length-variable-name)] parameter-name);
...);
매개 변수
-
function-attribute-list
-
0개 이상의 ACF 함수 특성을 지정합니다.
-
function-name
-
IDL 파일에 정의된 함수의 이름을 지정합니다. 함수 이름이 필요합니다.
-
length-variable-name
-
parameter-name에서 참조하는 메모리 영역의 크기를 바이트 단위로 지정하는 [in]-only 매개 변수의 이름을 지정합니다.
-
parameter-name
-
IDL 파일에 정의된 [out] 전용 포인터 매개 변수의 이름을 지정합니다.
설명
ACF 특성 [byte_count] 은 DCE IDL에 대한 Microsoft 확장을 나타냅니다. 따라서 MIDL 컴파일러 스위치 /osf를 사용하는 경우 이 특성을 사용할 수 없습니다.
참고
[바이트 수] 특성은 모든 [out] 매개 변수에 필요한 크기를 예측하기 어렵기 때문에 NDR64 구문에서 더 이상 지원되지 않습니다.
포인터 매개 변수에서 참조하는 메모리는 연속적이며 클라이언트 스텁에 의해 할당되거나 해제되지 않습니다. [byte_count] 특성의 이 기능을 사용하면 원격 프로시저를 두 번 이상 호출하는 동안 다시 사용할 수 있는 영구 버퍼 영역을 클라이언트 메모리에 만들 수 있습니다.
클라이언트 스텁 메모리 할당을 해제할 수 있으므로 효율성을 위해 애플리케이션을 조정할 수 있습니다. 예를 들어 Microsoft RPC를 사용하는 서비스 공급자 함수에서 [byte_count] 특성을 사용할 수 있습니다. 사용자 애플리케이션이 서비스 공급자 API를 호출하고 버퍼에 포인터를 보내면 서비스 공급자가 버퍼 포인터를 원격 함수에 전달할 수 있습니다. 서비스 공급자는 사용자가 메모리 영역을 다시 할당하도록 강제하지 않고 여러 원격 호출 중에 버퍼를 다시 사용할 수 있습니다.
메모리 영역에는 여러 포인터로 구성된 복잡한 데이터 구조가 포함될 수 있습니다. 메모리 영역이 연속적이므로 애플리케이션은 각 포인터와 구조를 개별적으로 해제하기 위해 여러 번의 호출을 할 필요가 없습니다. 대신 메모리 할당 또는 사용 가능한 루틴을 한 번 호출하여 메모리 영역을 할당하거나 해제할 수 있습니다.
버퍼는 [out]-only 매개 변수여야 하고 버퍼 길이(바이트 )는 [in]-only 매개 변수여야 합니다.
모든 [out] 매개 변수를 포함할 수 있을 만큼 큰 버퍼를 지정합니다. 숨겨진 안쪽 여백으로 인해 정확한 개수보다는 과대 애니메이션을 사용합니다. 예를 들어 4비트 포인터는 32비트 플랫폼의 4 바이트 정렬 경계에서 숨을 들이쉬고 64비트 플랫폼의 8 바이트 경계에서 8 바이트 포인터를 표시합니다. 따라서 스텁이 수행할 맞춤 패딩은 버퍼의 공간에서 를 고려해야 합니다. 또한 C 언어 컴파일 중에 사용되는 압축 수준은 다를 수 있습니다. C 언어 컴파일 중에 사용되는 압축 수준에 추가된 추가 압축 바이트를 설명하는 바이트 수 값을 사용합니다. 32비트 플랫폼과 64비트 플랫폼을 모두 포함하는 안전한 방법은 큰 메모리 블록으로 들어가는 각 개체가 8의 배수인 주소에서 시작된다고 가정하는 것입니다.
예
/* IDL file */
HRESULT proc1([in] unsigned long length,
[out] struct my_struct * pMyStruct);
/* ACF file */
proc1([byte_count(length)] pMyStruct);
참고 항목