call_as 특성
[call_as] 특성을 사용하면 원격 함수에 원격으로 호출할 수 없는 함수를 매핑할 수 있습니다.
[call_as (local-proc), [ , operation-attribute-list ] ] operation-name ;
매개 변수
-
local-proc
-
작업 정의 루틴을 지정합니다.
-
operation-attribute-list
-
작업에 적용되는 하나 이상의 특성을 지정합니다. 여러 특성을 쉼표로 구분합니다.
-
operation-name
-
애플리케이션에 표시되는 명명된 작업을 지정합니다.
설명
원격 함수에 원격으로 호출할 수 없는 함수를 매핑하는 기능은 네트워크를 통해 전송할 수 없는 다양한 매개 변수 형식이 있는 인터페이스에서 특히 유용합니다. 많은 [represent_as] 및 [transmit_as] 형식을 사용하는 대신 [call_as] 루틴을 사용하여 모든 변환을 결합할 수 있습니다. 애플리케이션 호출과 원격 호출 간에 루틴을 바인딩하는 두 가지 [call_as] 루틴(클라이언트 쪽 및 서버 쪽)을 제공합니다.
개체 인터페이스에 [call_as] 특성을 사용할 수 있습니다. 이 경우 [call_as] 에서 원격으로 액세스할 수 없는 인터페이스를 원격 인터페이스에 투명하게 매핑할 수 있으므로 로컬 호출 및 원격 호출에 인터페이스 정의를 사용할 수 있습니다. [call_as] 특성은 /osf 모드에서 사용할 수 없습니다.
예를 들어 개체 인터페이스 IFace의 루틴 f1에는 사용자 호출과 실제로 전송되는 호출 간에 수많은 변환이 필요하다고 가정합니다. 다음 예제에서는 인터페이스 IFace에 대한 IDL 및 ACF 파일에 대해 설명합니다.
인터페이스 IFace의 IDL 파일에서 다음을 수행합니다.
[local] HRESULT f1 ( <users parameter list> )
[call_as( f1 )] long Remf1( <remote parameter list> );
인터페이스 IFace용 ACF에서 다음을 수행합니다.
[call_as( f1 )] Remf1();
이렇게 하면 생성된 헤더 파일이 f1 정의를 사용하여 인터페이스를 정의하지만 Remf1에 대한 스텁도 제공합니다.
MIDL 컴파일러는 인터페이스 IFace에 대한 헤더 파일에 다음 Vtable을 생성합니다.
struct IFace_vtable
{
HRESULT ( * f1) ( <users parameter list> );
/* Other vtable functions. */
};
그러면 클라이언트 쪽 프록시에는 Remf1에 대한 일반적인 MIDL 생성 프록시가 있고 Remf1 의 서버 쪽 스텁은 일반적인 MIDL 생성 스텁과 동일합니다.
HRESULT IFace_Remf1_Stub ( <parameter list> )
{
// Other function code.
/* instead of IFace_f1 */
invoke IFace_f1_Stub ( <remote parameter list> );
// Other function code.
}
그런 다음 두 [call_as] 채권 루틴(클라이언트 쪽 및 서버 쪽)을 수동으로 코딩해야 합니다.
HRESULT f1_Proxy ( <users parameter list> )
{
// Other function code.
Remf1_Proxy ( <remote parameter list> );
// Other function code.
}
long IFace_f1_Stub ( <remote parameter list> )
{
// Other function code.
IFace_f1 ( <users parameter list> );
// Other function code.
}
개체 인터페이스의 경우 결합 루틴의 프로토타입입니다.
클라이언트 쪽의 경우:
<local_return_type> <interface>_<local_routine>_proxy(
<local_parameter_list> );
서버 쪽의 경우:
<remote_return_type> <interface>_<local_routine>_stub(
<remote_parameter_list> );
nonobject 인터페이스의 경우 이러한 인터페이스는 채권 루틴의 프로토타입입니다.
클라이언트 쪽의 경우:
<local_return_type> <local_routine> ( <local_parameter_list> );
서버 쪽의 경우:
<local_return_type> <interface>_v<maj>_<min>_<local_routine> (
<remote_parameter_list> );
추가 정보