Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het kenmerk [context_handle] identificeert een bindingsgreep die context- of statusinformatie onderhoudt op de server tussen externe procedure-aanroepen.
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); ]
Parameterwaarden
-
type-attribute-list
-
Hiermee geeft u een of meer kenmerken op die van toepassing zijn op het type.
-
typeaanduiding
-
Hiermee geeft u een type aanwijzer of een type-id. Een optionele opslagspecificatie kan voorafgaan aan typeaanduiding.
-
declarator en declarator-list
-
Hiermee geeft u standaard C-declaraties op, zoals id's, aanwijzerdeclaraties en matrixdeclaraties. De declaratie voor een contextgreep moet ten minste één aanwijzerdeclarator bevatten. Zie Matrix en Sized-Pointer Kenmerken, matrices en matrices en aanwijzers voor meer informatie. De declaratielijst bestaat uit een of meer declaraties, gescheiden door komma's. De parameternaam-id in de functiedeclaratie is optioneel.
-
function-attr-list
-
Hiermee geeft u nul of meer kenmerken op die van toepassing zijn op de functie. Geldige functiekenmerken zijn [callback], [lokaal]; het kenmerk [ref], [uniek] of [ptr]; en de gebruikskenmerken [tekenreeks], [negeren] en [context_handle].
-
ptr-decl
-
Hiermee geeft u nul of meer aanwijzerdeclaraties op. Een aanwijzerdeclarator is hetzelfde als de aanwijzer die in C wordt gebruikt; het is samengesteld van de * ontwerpator, modifiers zoals ver en de kwalificatie const.
-
functienaam
-
Hiermee geeft u de naam van de externe procedure.
-
parameter-attribute-list
-
Hiermee geeft u nul of meer directionele kenmerken, veldkenmerken, gebruikskenmerken en aanwijzerkenmerken die geschikt zijn voor het opgegeven parametertype. Scheid meerdere kenmerken met komma's.
-
context-handle-type
-
Hiermee geeft u de id op waarmee het type contexthandler wordt opgegeven zoals gedefinieerd in een typedef-declaratie die het kenmerk [context_handle] gebruikt. De uitvoeringsroutine is optioneel.
Windows Server 2003 en Windows XP: Eén interface kan geschikt zijn voor zowel geserialiseerde als niet-geserialiseerde contextingangen, waardoor één methode op een interface uitsluitend toegang heeft tot een contexthandgreep (geserialiseerd), terwijl andere methoden toegang hebben tot die contextingang in de gedeelde modus (niet-geserialiseerd). Deze toegangsmogelijkheden zijn vergelijkbaar met vergrendelingsmechanismen voor lezen/schrijven; methoden die gebruikmaken van een geserialiseerde contextingang zijn exclusieve gebruikers (schrijvers), terwijl methoden die gebruikmaken van een niet-geserialiseerde contexthandgreep gedeelde gebruikers (lezers). Methoden die de status van een contextgreep vernietigen of wijzigen, moeten worden geserialiseerd. Methoden die de status van een contextingang niet wijzigen, zoals methoden die gewoon vanuit een contextingang worden gelezen, kunnen niet worden geserialiseerd. Houd er rekening mee dat het maken van methoden impliciet wordt geserialiseerd.
Opmerkingen
Het kenmerk [context_handle] kan worden weergegeven als een idL-typetypekenmerk, als functie retourtypekenmerk of als parameterkenmerk. Wanneer u het kenmerk [context_handle] toepast op een typedefinitie, moet u ook een contextuitvoeringsroutine opgeven. Zie Uitvoeringsroutine voor servercontext voor meer informatie.
Wanneer u de MIDL-compiler in de standaardmodus (/ms_ext) gebruikt, kan een contextgreep elk type aanwijzer zijn dat door de gebruiker is geselecteerd, zolang deze voldoet aan de vereisten voor contextgrepen die hier worden beschreven. De gegevens die aan een dergelijk contexthandgreeptype zijn gekoppeld, worden niet verzonden op het netwerk en mogen alleen worden gemanipuleerd door de servertoepassing. DCE IDL-compilers beperken contextgrepen tot aanwijzers van het type ongeldig*. Deze functie is daarom niet beschikbaar wanneer u de MIDL-compiler /osf-switch gebruikt .
Net als bij andere handletypen is de contextgreep ondoorzichtig voor de clienttoepassing en worden eventuele gegevens die eraan zijn gekoppeld, niet verzonden. De contextgreep op de server fungeert als een ingang voor actieve context en alle gegevens die zijn gekoppeld aan het contextgreeptype zijn toegankelijk.
Als u een contextingang wilt maken, geeft de client een [out]- [verw] -aanwijzer door aan de server door aan een contextgreep. (De contextgreep zelf kan een NULL - of niet-NULL-waarde hebben, zolang de waarde consistent is met de aanwijzerkenmerken. Als het contextgreeptype bijvoorbeeld het kenmerk [verw] op het kenmerk heeft toegepast, kan het geen NULL-waarde hebben.) Er moet een andere bindingsgreep worden opgegeven om de binding uit te voeren totdat de contextgreep is gemaakt. Wanneer er geen expliciete ingang is opgegeven, wordt impliciete binding gebruikt. Wanneer er geen kenmerk [implicit_handle] aanwezig is, wordt er een automatische ingang gebruikt.
Met de externe procedure op de server wordt een actieve contextgreep gemaakt. De client moet deze contextgreep gebruiken als een parameter [in] of [in, out] in volgende aanroepen. Een contextgreep met [in]-only kan worden gebruikt als een bindingsgreep, dus deze moet een niet-NULL-waarde hebben. Een contextgreep met [in]-only weerspiegelt geen statuswijzigingen op de server.
Op de server kan de aangeroepen procedure de contexthandgreep zo nodig interpreteren. De aangeroepen procedure kan bijvoorbeeld heap-opslag toewijzen en de contextgreep gebruiken als een aanwijzer voor deze opslag.
Als u een contextgreep wilt sluiten, geeft de client de contextgreep door als een argument [in], [out]. De server moet een NULL-contextgreep retourneren wanneer deze de context niet langer onderhoudt namens de aanroeper. Als de contextgreep bijvoorbeeld een geopend bestand vertegenwoordigt en de aanroep het bestand sluit, moet de server de contextgreep instellen op NULL en deze terugsturen naar de client. Een NULL-waarde is ongeldig als een bindingsgreep voor volgende aanroepen.
Een contextgreep is slechts geldig voor één server. Wanneer een functie twee handleparameters heeft en de contextgreep niet NULL is, moeten de bindingsgrepen verwijzen naar dezelfde adresruimte.
Wanneer een functie een contextgreep [in] of [in, buiten] heeft, kan de contextgreep worden gebruikt als de bindingsgreep. In dit geval wordt impliciete binding niet gebruikt en wordt het kenmerk [implicit_handle] of [auto_handle] genegeerd.
De volgende beperkingen zijn van toepassing op contextingangen:
- Contextgrepen kunnen geen matrixelementen, structuurleden of union-leden zijn. Ze kunnen alleen parameters zijn.
- Contextgrepen kunnen niet het kenmerk [transmit_as] of [represent_as] hebben.
- Parameters die aanwijzers naar [out] contextgrepen zijn, moeten [verw]-aanwijzers zijn.
- Een [in] contextgreep kan worden gebruikt als de bindingsgreep en kan niet NULL zijn.
- Een contextgreep [in, out kan NULL zijn voor invoer, maar alleen als de procedure een andere expliciete ingangsparameter heeft. Als er geen andere expliciete niet-NULL-contextgreepparameters zijn, kan de contextgreep [in, out] niet NULL zijn.
- Een contextgreep kan niet worden gebruikt met callbacks.
Examples
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);
Zie ook