atribut transmit_as
Atribut [transmit_as] menginstruksikan pengkompilasi untuk mengaitkan type-id*,* yang merupakan jenis yang disajikan yang dimanipulasi klien dan aplikasi server, dengan jenis xmit-type yang ditransmisikan.
typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list;
void __RPC_USER type-id_to_xmit (
type-id __RPC_FAR *,
xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
xmit-type __RPC_FAR *,
type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
xmit-type__RPC_FAR *);
Parameter
-
jenis xmit
-
Menentukan jenis data yang ditransmisikan antara klien dan server.
-
type-attribute-list
-
Menentukan satu atau beberapa atribut yang berlaku untuk jenis tersebut. Atribut jenis yang valid termasuk [handle], [switch_type]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [string] dan [abaikan]. Pisahkan beberapa atribut dengan koma.
-
type-specifier
-
Menentukan jenis dasar, struct, union, enum type, atau type identifier. Spesifikasi penyimpanan opsional dapat mendahului penentu jenis.
-
daftar deklarator
-
Menentukan deklarator C standar, seperti pengidentifikasi, deklarator pointer, dan deklarator array. Untuk informasi selengkapnya, lihat Array dan Sized-Pointer Atribut, array, dan Array dan Pointer. Daftar deklarator terdiri dari satu atau beberapa deklarator yang dipisahkan oleh koma. Deklarator parameter dalam deklarator fungsi, seperti nama parameter, bersifat opsional.
-
type-id
-
Menentukan nama jenis data yang disajikan ke aplikasi klien dan server.
Keterangan
Untuk menggunakan atribut [transmit_as] , pengguna harus menyediakan rutinitas yang mengonversi data antara jenis yang disajikan dan yang dikirimkan; rutinitas ini juga harus membebaskan memori yang digunakan untuk menyimpan data yang dikonversi. Atribut [transmit_as] menginstruksikan rintangan untuk memanggil rutinitas konversi yang disediakan pengguna.
Jenis xmit yang ditransmisikan harus diselesaikan ke jenis dasar MIDL, jenis yang telah ditentukan sebelumnya, atau pengidentifikasi jenis. Untuk informasi selengkapnya, lihat Jenis Dasar MIDL.
Pengguna harus menyediakan rutinitas berikut.
Nama rutin | Deskripsi |
---|---|
type-id**_to_xmit** | Mengonversi data dari jenis yang disajikan ke jenis yang dikirimkan. Rutinitas ini mengalokasikan memori untuk jenis yang dikirimkan dan untuk data apa pun yang dirujuk oleh pointer dalam jenis yang dikirimkan. |
type-id**_from_xmit** | Mengonversi data dari jenis yang dikirimkan ke jenis yang disajikan. Rutinitas ini bertanggung jawab untuk mengalokasikan memori untuk data yang direferensikan oleh pointer dalam jenis yang disajikan. RPC mengalokasikan memori untuk jenis itu sendiri. |
type-id**_free_inst** | Mengosongkan memori yang dialokasikan untuk data yang direferensikan oleh pointer dalam jenis yang disajikan. RPC membebaskan memori untuk jenis itu sendiri. |
type-id**_free_xmit** | Membebaskan penyimpanan yang digunakan oleh penelepon untuk jenis yang dikirimkan dan untuk data yang dirujuk oleh pointer dalam jenis yang dikirimkan. |
Stub klien memanggil type-id**_to_xmit** untuk mengalokasikan ruang untuk jenis yang dikirimkan dan untuk menerjemahkan data ke dalam objek jenis xmit-type. Stub server mengalokasikan ruang untuk jenis data asli dan memanggil type-id**_from_xmit** untuk menerjemahkan data dari jenis yang dikirimkan ke jenis yang disajikan.
Setelah kembali dari kode aplikasi, stub server memanggil type-id**_free_inst** untuk membatalkan alokasi penyimpanan untuk type-id di sisi server. Stub klien memanggil type-id**_free_xmit** untuk membatalkan alokasi penyimpanan jenis xmit di sisi klien.
Jenis berikut tidak boleh memiliki atribut [transmit_as ]:
- Handel konteks (jenis dengan atribut jenis [context_handle] dan jenis yang digunakan sebagai parameter dengan atribut [context_handle ])
- Jenis yang merupakan pipa atau berasal dari pipa
- Jenis data yang digunakan sebagai jenis dasar definisi pipa
- Parameter yang merupakan penunjuk atau mengatasi penunjuk
- Parameter yang sesuai, bervariasi, atau terbuka array
- Struktur yang berisi array yang sesuai
- Jenis yang telah ditentukan sebelumnya handle_t, batal
Jenis yang dikirimkan harus sesuai dengan batasan berikut:
- Mereka tidak boleh pointer atau penunjuk kontainer.
- Mereka tidak boleh pipa atau berisi pipa.
Contoh
typedef struct _TREE_NODE_TYPE
{
unsigned short data;
struct _TREE_NODE_TYPE * left;
struct _TREE_NODE_TYPE * right;
} TREE_NODE_TYPE;
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE;
void __RPC_USER TREE_TYPE_to_xmit(
TREE_TYPE __RPC_FAR * ,
TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *);
void __RPC_USER TREE_TYPE_from_xmit (
TREE_XMIT_TYPE __RPC_FAR *,
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_inst(
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_xmit(
TREE_XMIT_TYPE __RPC_FAR *);
Lihat juga