type_UserSize 함수

<type>_UserSize 함수는 [wire_marshal] 및 [ user_marshal] 특성에 대한 도우미 함수입니다. 스텁은 클라이언트 또는 서버 쪽에서 데이터를 마샬링하기 전에 이 함수를 호출하여 사용자 데이터 개체의 RPC 데이터 버퍼 크기를 조정합니다. 함수는 다음과 같이 정의됩니다.

unsigned long __RPC_USER  <type>_UserSize(
    unsigned long __RPC_FAR * pFlags,
    unsigned long StartingSize,
    <type>  __RPC_FAR *pMyObj);

함수 이름의 형식>은 <[wire_marshal] 또는 [user_marshal] 형식 정의에 지정된 대로 userm-type을 의미합니다. 이 형식은 MIDL 컴파일러에 알 수 없는 [user_marshal] 특성과 함께 사용될 때 전송할 수 없거나 짝수일 수 있습니다. 와이어 형식 이름(네트워크를 통해 전송되는 형식의 이름)은 함수 프로토타입에서 사용되지 않습니다. 그러나 유선 형식은 OSF DCE에서 지정한 대로 데이터의 레이아웃을 정의합니다. 모든 데이터를 NDR(네트워크 데이터 표현) 형식으로 변환해야 합니다.

pFlags 매개 변수는 서명되지 않은 긴 플래그 필드에 대한 포인터입니다. 플래그의 위쪽 단어에는 부동 소수점, 바이트 순서 및 문자 표현에 대해 OSF DCE에서 정의한 NDR 형식 플래그가 포함됩니다. 아래쪽 단어에는 COM 채널에서 정의한 대로 마샬링 컨텍스트 플래그가 포함됩니다. 필드 내 플래그의 정확한 레이아웃은 다음 표에 나와 있습니다.

비트 플래그
31-24 부동 소수점 표현 0 = IEEE 1 = VAX 2 = 크레이 3 = IBM
23-20 정수 및 부동 소수점 바이트 순서 0 = Big-endian 1 = Little-endian
19-16 문자 표현 0 = ASCII 1 = EBCDIC
15~0 컨텍스트 플래그 마샬링 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

마샬링 컨텍스트 플래그를 사용하면 RPC 호출의 컨텍스트에 따라 루틴의 동작을 변경할 수 있습니다. 예를 들어 데이터 블록에 대한 핸들(long)이 있는 경우 In-process 호출에 대한 핸들을 보낼 수 있지만 호출에 대한 실제 데이터를 다른 컴퓨터에 보냅니다. 마샬링 컨텍스트 플래그 및 해당 값은 SDK(플랫폼 소프트웨어 개발 키트)의 Wtypes.h 및 Wtypes.idl 파일에 정의됩니다.

참고

와이어 유형이 올바르게 정의되면 NDR 엔진이 필요한 변환을 수행하므로 NDR 형식 플래그를 사용할 필요가 없습니다.

 

StartingSize 매개 변수는 현재 버퍼 오프셋입니다. 시작 크기는 사용자 개체의 버퍼 오프셋을 나타내며 제대로 정렬되거나 정렬되지 않을 수 있습니다. 루틴은 필요한 패딩을 고려해야 합니다.

pMyObj 매개 변수는 사용자 형식 개체에 대한 포인터입니다.

반환 값은 새 오프셋 또는 버퍼 위치입니다. 함수는 시작 크기와 가능한 패딩 및 데이터 크기인 누적 크기를 반환해야 합니다.

type>_UserSize 함수는< 필요한 크기의 과대 평가값을 반환할 수 있습니다. 전송된 버퍼의 실제 크기는 버퍼 할당 크기가 아닌 데이터 크기로 정의됩니다.

컴파일 시간에 와이어 크기를 계산할 수 있는 경우 type>_UserSize 함수가 호출되지 않습니다.< 대부분의 공용 구조체에 대해 포인터가 없더라도 와이어 표현의 실제 크기는 런타임에만 확인할 수 있습니다.

user_marshal 및 wire_marshal 대한 마샬링 규칙

user_marshal

wire_marshal