atribut call_as

Atribut [call_as] memungkinkan Anda memetakan fungsi yang tidak dapat dipanggil dari jarak jauh ke fungsi jarak jauh.

[call_as (local-proc), [ , operation-attribute-list ] ] operation-name ;

Parameter

local-proc

Menentukan rutinitas yang ditentukan operasi.

operation-attribute-list

Menentukan satu atau beberapa atribut yang berlaku untuk operasi. Pisahkan beberapa atribut dengan koma.

nama operasi

Menentukan operasi bernama yang disajikan ke aplikasi.

Keterangan

Kemampuan untuk memetakan fungsi yang tidak dapat dipanggil dari jarak jauh ke fungsi jarak jauh sangat membantu dalam antarmuka yang memiliki banyak jenis parameter yang tidak dapat ditransmisikan di seluruh jaringan. Daripada menggunakan banyak jenis [represent_as] dan [transmit_as] , Anda dapat menggabungkan semua konversi menggunakan rutinitas [call_as ]. Anda menyediakan dua rutinitas [call_as] (sisi klien dan sisi server) untuk mengikat rutinitas antara panggilan aplikasi dan panggilan jarak jauh.

Atribut [call_as] dapat digunakan untuk antarmuka objek. Dalam hal ini, definisi antarmuka dapat digunakan untuk panggilan lokal serta panggilan jarak jauh karena [call_as] memungkinkan antarmuka yang tidak dapat diakses dari jarak jauh untuk dipetakan secara transparan ke antarmuka jarak jauh. Atribut [call_as] tidak dapat digunakan dengan mode /osf .

Misalnya, asumsikan bahwa f1 rutin dalam antarmuka objek IFace memerlukan banyak konversi antara panggilan pengguna dan apa yang sebenarnya ditransmisikan. Contoh berikut menjelaskan file IDL dan ACF untuk antarmuka IFace:

Dalam file IDL untuk antarmuka IFace:

[local] HRESULT f1 ( <users parameter list> ) 
[call_as( f1 )] long Remf1( <remote parameter list> );

Di ACF untuk antarmuka IFace:

[call_as( f1 )] Remf1();

Ini menyebabkan file header yang dihasilkan untuk menentukan antarmuka menggunakan definisi f1, namun juga menyediakan stub untuk Remf1.

Pengkompilasi MIDL akan menghasilkan Vtable berikut dalam file header untuk antarmuka IFace:

struct IFace_vtable
{ 
    HRESULT ( * f1) ( <users parameter list> ); 
    /* Other vtable functions. */
};

Proksi sisi klien kemudian akan memiliki proksi yang dihasilkan MIDL khas untuk Remf1, sementara stub sisi server untuk Remf1 akan sama dengan stub khas yang dihasilkan MIDL:

HRESULT IFace_Remf1_Stub ( <parameter list> ) 
{ 
    // Other function code.

    /* instead of IFace_f1 */
    invoke IFace_f1_Stub ( <remote parameter list> ); 

    // Other function code.
}

Kemudian, dua rutinitas obligasi [call_as] (sisi klien dan sisi server) harus dikodekan secara manual:

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.
    }

Untuk antarmuka objek, ini adalah prototipe untuk rutinitas obligasi.

Untuk sisi klien:

<local_return_type>  <interface>_<local_routine>_proxy( 
    <local_parameter_list> );

Untuk sisi server:

<remote_return_type>  <interface>_<local_routine>_stub(
    <remote_parameter_list> );

Untuk antarmuka nonobject, ini adalah prototipe untuk rutinitas obligasi.

Untuk sisi klien:

<local_return_type>  <local_routine> ( <local_parameter_list> );

Untuk sisi server:

<local_return_type>  <interface>_v<maj>_<min>_<local_routine> ( 
    <remote_parameter_list> );

Lihat juga

/osf

represent_as

transmit_as