다음을 통해 공유


매개 변수 설명자

앞에서 설명한 것처럼 –Oi–Oif 스타일 매개 변수 설명자가 있습니다.

–Oi 매개 변수 설명자

완전히 해석된 스텁에는 RPC 호출의 각 매개 변수에 대한 추가 정보가 필요합니다. 프로시저의 매개 변수 설명은 프로시저에 대한 설명 직후에 따릅니다.

Simple –Oi

매개 변수 설명자

[in] 또는 반환 단순 형식 매개 변수에 대한 설명의 형식은 다음과 같습니다.

FC_IN_PARAM_BASETYPE 
simple_type<1>

-또는-

FC_RETURN_PARAM_BASETYPE 
simple_type<1>

여기서 simple_type<1> 은 단순 형식을 나타내는 FC 토큰입니다. 코드는 다음과 같습니다.

4e  FC_IN_PARAM_BASETYPE 
53  FC_RETURN_PARAM_BASETYPE

기타 –Oi

매개 변수 설명자

다른 모든 매개 변수 형식에 대한 설명의 형식은 다음과 같습니다.

param_direction<1> 
stack_size<1> 
type_offset<2>

여기서 이러한 각 설명에 대한 param_direction<1> 필드는 다음 표에 표시된 필드 중 하나여야 합니다.

Hex 플래그 의미
4d FC_IN_PARAM in 매개 변수입니다.
50 FC_IN_OUT_PARAM in/out 매개 변수입니다.
51 FC_OUT_PARAM out 매개 변수입니다.
52 FC_RETURN_PARAM 프로시저 반환 값입니다.
4f FC_IN_PARAM_NO_FREE_INST 해제가 이루어지지 않는 매개 변수인 xmit/rep의 입니다.

 

stack_size<1> 은 스택에서 매개 변수가 차지하는 정수 수로 표현되는 스택의 매개 변수 크기입니다.

참고

–Oi 모드는 64비트 플랫폼에서 지원되지 않습니다.

 

type_offset<2> 필드는 형식 형식 문자열 테이블의 오프셋으로, 인수의 형식 설명자를 나타냅니다.

–Oif 매개 변수 설명자

매개 변수 설명에는 두 가지 가능한 형식이 있습니다. 하나는 기본 형식이고 다른 형식은 다른 형식입니다.

기본 형식:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_format_char<1> 
unused<1>

기타:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_offset<2>

두 stack_offset<2> 에서는 가상 인수 스택의 오프셋(바이트)을 나타냅니다. 기본 형식의 경우 인수 형식은 형식에 해당하는 형식 문자로 직접 지정됩니다. 다른 형식의 경우 type_offset<2> 필드는 인수의 형식 설명자가 있는 형식 형식 문자열 테이블의 오프셋을 제공합니다.

매개 변수 특성 필드는 다음과 같이 정의됩니다.

typedef struct
  {
  unsigned short  MustSize            : 1;    // 0x0001
  unsigned short  MustFree            : 1;    // 0x0002
  unsigned short  IsPipe              : 1;    // 0x0004
  unsigned short  IsIn                : 1;    // 0x0008
  unsigned short  IsOut               : 1;    // 0x0010
  unsigned short  IsReturn            : 1;    // 0x0020
  unsigned short  IsBasetype          : 1;    // 0x0040
  unsigned short  IsByValue           : 1;    // 0x0080
  unsigned short  IsSimpleRef         : 1;    // 0x0100
  unsigned short  IsDontCallFreeInst  : 1;    // 0x0200
  unsigned short  SaveForAsyncFinish  : 1;    // 0x0400
  unsigned short  Unused              : 2;
  unsigned short  ServerAllocSize     : 3;    // 0xe000
  } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  • MustSize 비트는 매개 변수 크기를 조정해야 하는 경우에만 설정됩니다.
  • 서버가 매개 변수의 NdrFree* 루틴을 호출해야 하는 경우 MustFree 비트가 설정됩니다.
  • IsSimpleRef 비트는 다른 포인터 이외의 다른 포인터에 대한 참조 포인터이고 할당 특성이 없는 매개 변수에 대해 설정됩니다. 이러한 형식의 경우 기본 형식에 대한 참조 포인터를 제외하고 매개 변수 설명의 type_offset<> 필드는 참조 형식에 대한 오프셋을 제공합니다. 참조 포인터는 건너뛰기만 하면 됩니다.
  • IsDontCallFreeInst 비트는 자유 instance 루틴을 호출해서는 안 되는 특정 represent_as 매개 변수에 대해 설정됩니다.
  • 매개 변수가 포인터에 대한 [out], [in] 또는 [in,out] 포인터이거나 열거형16에 대한 포인터인 경우 ServerAllocSize 비트는 0이 아니고 I_RpcAllocate 호출을 사용하는 대신 서버 인터프리터 스택에서 초기화됩니다. 0이 아닌 경우 이 값에 8을 곱하여 매개 변수의 바이트 수를 가져옵니다. 이렇게 하면 포인터에 대해 항상 8바이트 이상이 할당됩니다.
  • IsBasetype 비트는 기본 –Oif 인터프리터 루프에 의해 마샬링되는 단순 형식에 대해 설정됩니다. 특히 범위 특성이 있는 단순 형식은 FC_RANGE 토큰을 사용하여 디스패치를 통해 범위 루틴 마샬링을 강제로 적용하기 위해 기본 형식으로 플래그가 지정되지 않습니다.
  • IsByValue 비트는 값으로 전송되는 복합 형식에 대해 설정되지만 인수가 포인터인지 여부에 관계없이 단순 형식에 대해서는 설정되지 않습니다. 설정된 복합 형식은 구조체, 공용 구조체, transmit_as, represent_as, wire_marshal 및 SAFEARRAY입니다. 일반적으로 비트는 –Oicf 인터프리터에서 기본 인터프리터 루프의 이점을 위해 도입되어 비심플 인수(복합 형식 인수라고 함)가 제대로 역참조되도록 합니다. 이 비트는 이전 버전의 인터프리터에서 사용되지 않았습니다.