Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Atribut [context_handle] identifikuje popisovač vazby, který udržuje kontext nebo informace o stavu na serveru mezi vzdálenými voláními procedur.
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); ]
Parametry
-
type-attribute-list
-
Určuje jeden nebo více atributů, které se vztahují na typ.
-
Specifikátor typů
-
Určuje typ ukazatele nebo identifikátor typu. Volitelná specifikace úložiště může předcházet specifikátoru typu.
-
deklarátor a seznam deklarátoru
-
Určuje standardní deklarátory jazyka C, jako jsou identifikátory, deklarátory ukazatele a deklarátory polí. Deklarátor pro popisovač kontextu musí obsahovat alespoň jeden deklarátor ukazatele. Další informace naleznete v tématu Pole a Sized-Pointer Atributy, matice a matice a ukazatele. Deklarátor-seznam se skládá z jednoho nebo více deklarátorů oddělených čárkami. Identifikátor názvu parametru v deklarátoru funkce je volitelný.
-
function-attr-list
-
Určuje nula nebo více atributů, které se vztahují na funkci. Platné atributy funkce jsou [zpětné volání], [local]; atribut ukazatele [odkaz], [unique] nebo [ptr]; a atributy použití [string], [ignore] a [context_handle].
-
ptr-decl
-
Určuje deklarátory nuly nebo více ukazatelů. Deklarátor ukazatele je stejný jako deklarátor ukazatele použitý v jazyce C; je sestaven z návrhátoru * , modifikátorů, jako je daleko, a kvalifikátoru const.
-
function-name
-
Určuje název vzdálené procedury.
-
parameter-attribute-list
-
Určuje nula nebo více směrových atributů, atributů polí, atributů použití a atributů ukazatelů vhodných pro zadaný typ parametru. Oddělte více atributů čárkami.
-
context-handle-type
-
Určuje identifikátor, který určuje typ popisovače kontextu definovaný v deklaraci typedef, která přebírá atribut [context_handle]. Rutina rundownu je volitelná.
Windows Server 2003 a Windows XP: Jediné rozhraní může pojmout serializované i neserializované kontextové popisovače, což umožňuje jedné metodě v rozhraní přistupovat výhradně k kontextovým popisovačům (serializováno), zatímco jiné metody přistupují k danému kontextovém popisovači ve sdíleném režimu (neserializované). Tyto možnosti přístupu jsou srovnatelné s mechanismy uzamykání pro čtení a zápis; metody využívající serializovaný popisovač kontextu jsou výhradními uživateli (zapisovači), zatímco metody používající neserializovaný kontextový popisovač jsou sdílení uživatelé (čtenáři). Metody, které zničí nebo upravují stav popisovače kontextu, musí být serializovány. Metody, které nemění stav popisovače kontextu, například metody, které jednoduše čtou z popisovače kontextu, mohou být neserializovány. Všimněte si, že metody vytváření jsou implicitně serializovány.
Poznámky
Atribut [context_handle] se může zobrazit jako atribut typu IDL typedef , jako atribut návratového typu funkce nebo jako atribut parametru. Když použijete atribut [context_handle] na definici typu, musíte také poskytnout rutinu spuštění kontextu. Podrobnosti najdete v části Rutina spuštění kontextu serveru .
Při použití kompilátoru MIDL ve výchozím režimu (/ms_ext) může být popisovač kontextu libovolný typ ukazatele vybraný uživatelem, pokud splňuje požadavky na popisovače kontextu popsané zde. Data přidružená k takovému typu popisovače kontextu nejsou přenášena v síti a měla by být manipulována pouze serverovou aplikací. Kompilátory IDL DCE omezují kontextové popisovače na ukazatele typu void*. Tato funkce proto není k dispozici, pokud používáte přepínač kompilátoru MIDL /osf .
Stejně jako u jiných typů popisovačů je kontextový popisovač neprůžný pro klientskou aplikaci a veškerá data přidružená k němu se nepřenesou. Na serveru slouží popisovač kontextu jako popisovač v aktivním kontextu a všechna data přidružená k typu popisovače kontextu jsou přístupná.
Pokud chcete vytvořit popisovač kontextu, klient předá serveru ukazatel [out], [odkaz] na popisovač kontextu. (Samotný kontextový popisovač může mít hodnotu NULL nebo hodnotu, která není null – pokud je její hodnota konzistentní s atributy ukazatele. Pokud má například typ popisovače kontextu atribut [ref], nemůže mít hodnotu NULL .) Aby bylo možné vytvořit kontextový popisovač, je nutné zadat další popisovač vazby. Pokud není zadán žádný explicitní popisovač, použije se implicitní vazba. Pokud není k dispozici žádný atribut [implicit_handle], použije se automatický popisovač.
Vzdálený postup na serveru vytvoří aktivní kontextový popisovač. Klient musí použít tento kontextový popisovač jako parametr [in] nebo [in, out] v následných voláních. Kontextový popisovač [ in] lze použít jako popisovač vazby, takže musí mít hodnotu bez hodnoty NULL . Kontextový popisovač [ in] neodráží změny stavu na serveru.
Na serveru může volaná procedura interpretovat popisovač kontextu podle potřeby. Například volaný postup může přidělit úložiště haldy a použít kontextový popisovač jako ukazatel na toto úložiště.
Pokud chcete zavřít popisovač kontextu, klient předá popisovač kontextu jako argument [in], [out]. Server musí vrátit popisovač kontextu NULL , pokud již není zachován kontext jménem volajícího. Pokud například kontextový popisovač představuje otevřený soubor a volání soubor zavře, musí server nastavit kontextový popisovač na hodnotu NULL a vrátit ho klientovi. Hodnota NULL je neplatná jako popisovač vazby pro následná volání.
Kontextový popisovač je platný pouze pro jeden server. Pokud má funkce dva parametry popisovače a kontextový popisovač není NULL, vazbové popisovače musí odkazovat na stejný adresní prostor.
Pokud má funkce popisovač kontextu [in] nebo [in, out], lze jako popisovač vazby použít jeho kontextový popisovač. V tomto případě se implicitní vazba nepoužívá a atribut [implicit_handle] nebo [auto_handle] se ignoruje.
Následující omezení platí pro popisovače kontextu:
- Kontextové popisovače nemohou být prvky pole, členy struktury ani členy sjednocení. Můžou to být jenom parametry.
- Popisovače kontextu nemohou mít atribut [transmit_as] nebo [represent_as].
- Parametry, které jsou ukazateli na [out] kontextových popisovačů, musí být [odkaz] ukazatele.
- Kontextový popisovač [in] lze použít jako popisovač vazby a nesmí mít hodnotu NULL.
- Kontextový popisovač [in, out context handle může být při vstupu NULL , ale pouze pokud má procedura jiný explicitní popisovač parametr. Pokud neexistují žádné další explicitní parametry popisovače kontextu bez hodnoty NULL , kontextový popisovač [in, out] nemůže mít hodnotu NULL.
- Kontextový popisovač nelze použít se zpětnými voláními.
Příklady
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);
Viz také