다음을 통해 공유


Microsoft RPC Binding-Handle 확장

IDL 언어에 대한 Microsoft 확장은 첫 번째, 맨 왼쪽 매개 변수 이외의 위치에 표시되는 여러 핸들 매개 변수를 지원합니다. 다음 단계에서는 MIDL 컴파일러가 DCE 호환성 모드(/osf) 및 기본(Microsoft 확장) 모드에서 바인딩 핸들 매개 변수를 resolve 순서를 설명합니다.

DCE 호환 모드

  • 첫 번째 위치에 나타나는 바인딩 핸들입니다.
  • 맨 왼쪽 [in, context_handle] 매개 변수입니다.
  • [implicit_handle] 또는 [auto_handle]에서 지정한 암시적 바인딩 핸들입니다.
  • ACF가 없으면 기본적으로 [auto_handle]을 사용합니다.

기본 모드

  • 맨 왼쪽 명시적 바인딩 핸들입니다.
  • [implicit_handle] 또는 [auto_handle]에서 지정한 암시적 바인딩 핸들입니다.
  • ACF가 없으면 기본적으로 [auto_handle]을 사용합니다.

DCE IDL 컴파일러에서 명시적 바인딩 핸들을 첫 번째 매개 변수로 찾습니다. 첫 번째 매개 변수가 바인딩 핸들이 아니고 하나 이상의 컨텍스트 핸들을 지정하면 맨 왼쪽 컨텍스트 핸들이 바인딩 핸들로 사용됩니다. 첫 번째 매개 변수가 핸들이 아니고 컨텍스트 핸들이 없는 경우 프로시저는 ACF 특성 [implicit_handle] 또는 [auto_handle]을 사용하여 암시적 바인딩을 사용합니다.

IDL에 대한 Microsoft 확장을 사용하면 바인딩 핸들이 첫 번째 매개 변수가 아닌 위치에 있을 수 있습니다. 기본형, 프로그래머 정의 또는 컨텍스트 핸들이든 관계없이 맨 왼쪽의 명시적 핸들 매개 변수는 바인딩 핸들입니다. 핸들 매개 변수가 없는 경우 프로시저는 ACF 특성 [implicit_handle] 또는 [auto_handle]을 사용하여 암시적 바인딩을 사용합니다.

다음 규칙은 DCE 호환성(/osf) 모드와 기본 모드 모두에 적용됩니다.

  • ACF가 없는 경우 자동 핸들 바인딩이 사용됩니다.
  • 개별 함수 대한 명시적 [in] 또는 [in, out] 핸들은 인터페이스에 지정된 암시적 바인딩을 선점합니다.
  • 여러 [in] 또는 [in, out] 기본 핸들은 지원되지 않습니다.
  • 여러 [in] 또는 [in, out] 명시적 컨텍스트 핸들이 허용됩니다.
  • binding-handle 매개 변수를 제외한 모든 프로그래머 정의 핸들 매개 변수는 허용 가능한 데이터로 처리됩니다.

다음 표에는 예제가 포함되어 있으며 각 컴파일러 모드에서 바인딩 핸들이 할당되는 방법을 설명합니다.

예제 Description
void proc1( void );
명시적 핸들이 지정되지 않았습니다. [ implicit_handle] 또는 [auto_handle]에서 지정한 암시적 바인딩 핸들이 사용됩니다. ACF가 없으면 자동 핸들이 사용됩니다.
void proc2([in] handle_t H,           [in] short s );
handle_t 형식의 명시적 핸들이 지정됩니다. 매개 변수 H 는 프로시저에 대한 바인딩 핸들입니다.
void proc3([in] short s,           [in] handle_t H );
첫 번째 매개 변수는 핸들이 아닙니다. 기본 모드에서 맨 왼쪽 핸들 매개 변수 H는 바인딩 핸들입니다. /osf 모드에서는 암시적 바인딩이 사용됩니다. 두 번째 매개 변수를 전송할 수 있어야 하고 handle_t 전송할 수 없으므로 오류가 보고됩니다.
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
첫 번째 매개 변수는 핸들이 아닙니다. 기본 모드에서 맨 왼쪽 핸들 매개 변수 H는 바인딩 핸들입니다. 스텁은 사용자가 제공한 루틴을 MY_HDL_bind 호출하고 MY_HDL_unbind. /osf 모드에서 암시적 바인딩이 사용됩니다. 프로그래머 정의 핸들 매개 변수 H 는 허용 가능한 데이터로 처리됩니다.
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
첫 번째 매개 변수는 바인딩 핸들입니다. 매개 변수 H 는 바인딩 핸들 매개 변수입니다. 두 번째 프로그래머 정의 핸들 매개 변수는 허용 가능한 데이터로 처리됩니다.
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
바인딩 핸들은 컨텍스트 핸들입니다. 매개 변수 H 는 바인딩 핸들입니다.