다음을 통해 공유


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> );

추가 정보

/osf

represent_as

transmit_as