atribut context_handle

Atribut [context_handle] mengidentifikasi handel pengikatan yang mempertahankan konteks, atau informasi status, di server antara panggilan prosedur jarak jauh.

typedef [context_handle [ , type-attribute-list ] ] type-specifier declarator-list;

[context_handle [, function-attr-list ] ] type-specifier [ptr-decl] function-name(
    [ [parameter-attribute-list] ] type-specifier [declarator], ...);

[ [ function-attr-list ] ] type-specifier [ ptr-decl ] function-name(
    [context_handle [ , parameter-attribute-list ] ] type-specifier [declarator], ...);

[ void __RPC_USER context-handle-type_rundown (
  context-handle-type); ]

Parameter

type-attribute-list

Menentukan satu atau beberapa atribut yang berlaku untuk jenis tersebut.

type-specifier

Menentukan jenis penunjuk atau pengidentifikasi jenis. Spesifikasi penyimpanan opsional dapat mendahului type-specifier.

deklarator dan daftar deklarator

Menentukan deklarator C standar, seperti pengidentifikasi, deklarator pointer, dan deklarator array. Deklarator untuk handel konteks harus menyertakan setidaknya satu deklarator pointer. Untuk informasi selengkapnya, lihat Array dan Sized-Pointer Atribut, array, dan Array dan Pointer. Daftar deklarator terdiri dari satu atau beberapa deklarator, dipisahkan oleh koma. Pengidentifikasi nama parameter dalam deklarator fungsi bersifat opsional.

function-attr-list

Menentukan nol atau lebih atribut yang berlaku untuk fungsi. Atribut fungsi yang valid adalah [callback], [local]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [string], [abaikan], dan [context_handle].

ptr-decl

Menentukan nol atau lebih deklarator penunjuk. Deklarator penunjuk sama dengan deklarator penunjuk yang digunakan dalam C; ini dibangun dari penunjuk * , pengubah seperti jauh, dan konstan kualifikasi.

nama fungsi

Menentukan nama prosedur jarak jauh.

parameter-attribute-list

Menentukan atribut arah nol atau lebih, atribut bidang, atribut penggunaan, dan atribut pointer yang sesuai untuk jenis parameter yang ditentukan. Pisahkan beberapa atribut dengan koma.

jenis handel konteks

Menentukan pengidentifikasi yang menentukan jenis handel konteks seperti yang didefinisikan dalam deklarasi typedef yang mengambil atribut [context_handle ]. Rutinitas rundown bersifat opsional.

Windows Server 2003 dan Windows XP: Satu antarmuka dapat mengakomodasi handel konteks berseri dan nonserialisasi, memungkinkan satu metode pada antarmuka untuk mengakses handel konteks secara eksklusif (diserialisasikan), sementara metode lain mengakses handel konteks tersebut dalam mode bersama (nonserialisasi). Kemampuan akses ini sebanding dengan mekanisme penguncian baca/tulis; Metode yang menggunakan handel konteks berseri adalah pengguna eksklusif (penulis), sedangkan metode yang menggunakan handel konteks yang tidak diserialisasi adalah pengguna bersama (pembaca). Metode yang menghancurkan atau memodifikasi status handel konteks harus diserialisasikan. Metode yang tidak memodifikasi status handel konteks, seperti metode yang hanya membaca dari handel konteks, dapat tidak diserialisasi. Perhatikan bahwa metode pembuatan diserialisasikan secara implisit.

Keterangan

Atribut [context_handle] dapat muncul sebagai atribut jenis typedef IDL, sebagai atribut jenis pengembalian fungsi, atau sebagai atribut parameter. Saat Anda menerapkan atribut [context_handle] ke definisi jenis, Anda juga harus memberikan rutinitas rundown konteks. Lihat Rutinitas Run-down Konteks Server untuk detailnya.

Saat Anda menggunakan pengkompilasi MIDL dalam mode default (/ms_ext), handel konteks dapat menjadi jenis penunjuk apa pun yang dipilih oleh pengguna, selama sesuai dengan persyaratan untuk handel konteks yang dijelaskan di sini. Data yang terkait dengan jenis handel konteks seperti itu tidak dikirimkan pada jaringan dan hanya boleh dimanipulasi oleh aplikasi server. Pengkompilasi IDL DCE membatasi handel konteks ke penunjuk jenis kekosongan*. Oleh karena itu fitur ini tidak tersedia ketika Anda menggunakan sakelar / osf compiler MIDL.

Seperti halnya jenis handel lainnya, handel konteks buram ke aplikasi klien, dan data apa pun yang terkait dengannya tidak ditransmisikan. Di server, handel konteks berfungsi sebagai handel pada konteks aktif, dan semua data yang terkait dengan jenis handel konteks dapat diakses.

Untuk membuat handel konteks, klien meneruskan ke server penunjuk [out], [ref] ke handel konteks. (Handel konteks itu sendiri dapat memiliki nilai NULL atau non-NULL —selama nilainya konsisten dengan atribut penunjuknya. Misalnya, ketika jenis handel konteks memiliki atribut [ref] yang diterapkan padanya, itu tidak dapat memiliki nilai NULL .) Handel pengikatan lain harus disediakan untuk menyelesaikan pengikatan hingga handel konteks dibuat. Ketika tidak ada handel eksplisit yang ditentukan, pengikatan implisit digunakan. Ketika tidak ada atribut [implicit_handle] , handel otomatis akan digunakan.

Prosedur jarak jauh pada server membuat handel konteks aktif. Klien harus menggunakan handel konteks tersebut sebagai parameter [in] atau [in, out] dalam panggilan berikutnya. Handel konteks [in]-only dapat digunakan sebagai handel pengikatan, sehingga harus memiliki nilai non-NULL. Handel konteks [dalam]-saja tidak mencerminkan perubahan status pada server.

Di server, prosedur yang dipanggil dapat menginterpretasikan handel konteks sesuai kebutuhan. Misalnya, prosedur yang disebut dapat mengalokasikan penyimpanan heap dan menggunakan handel konteks sebagai penunjuk ke penyimpanan ini.

Untuk menutup handel konteks, klien meneruskan handel konteks sebagai argumen[in], [out]. Server harus mengembalikan handel konteks NULL ketika tidak lagi mempertahankan konteks atas nama pemanggil. Misalnya, jika handel konteks mewakili file yang terbuka dan panggilan menutup file, server harus mengatur handel konteks ke NULL dan mengembalikannya ke klien. Nilai NULL tidak valid sebagai handel pengikatan pada panggilan berikutnya.

Handel konteks hanya valid untuk satu server. Ketika fungsi memiliki dua parameter handel dan handel konteks bukan NULL, handel pengikatan harus merujuk ke ruang alamat yang sama.

Ketika fungsi memiliki handel konteks [in] atau [in, out ], handel konteksnya dapat digunakan sebagai handel pengikatan. Dalam hal ini, pengikatan implisit tidak digunakan dan atribut [implicit_handle] atau [auto_handle] diabaikan.

Pembatasan berikut berlaku untuk handel konteks:

  • Handel konteks tidak boleh berupa elemen array, anggota struktur, atau anggota serikat. Mereka hanya bisa menjadi parameter.
  • Handel konteks tidak boleh memiliki atribut[transmit_as] atau [represent_as].
  • Parameter yang merupakan penunjuk ke handel konteks [out] harus [ref] pointer.
  • Handel konteks [dalam] dapat digunakan sebagai handel pengikatan dan tidak boleh NULL.
  • Handel konteks [in, out dapat berupa NULL pada input, tetapi hanya jika prosedur memiliki parameter handel eksplisit lainnya. Jika tidak ada parameter handel konteks non-NULL eksplisit lainnya, handel konteks [in, out] tidak boleh NULL.
  • Handel konteks tidak dapat digunakan dengan panggilan balik.

Contoh

typedef [context_handle] void * PCONTEXT_HANDLE_TYPE; 
short RemoteFunc1([out] PCONTEXT_HANDLE_TYPE * pCxHandle); 
short RemoteFunc2([in, out] PCONTEXT_HANDLE_TYPE * pCxHandle); 
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown (PCONTEXT_HANDLE_TYPE);

Lihat juga

Array

auto_handle

Callback

Reset Konteks Klien

const

Handel Konteks

Menangani

Pengikatan dan Handel

Mengabaikan

implicit_handle

In

Lokal

Klien Multithreaded dan Handel Konteks

/ms_ext

Out ekspres

Ptr

Ref

represent_as

RpcSsDestroyClientContext

Rutinitas Run-down Konteks Server

string

transmit_as

typedef

Unik

batal