Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zazwyczaj należy utworzyć uchwyt kontekstu, określając atrybut [context_handle] w definicji typu w pliku IDL. Definicja typu określa również niejawnie procedurę zamknięcia kontekstu, którą należy podać. W przypadku awarii komunikacji między klientem a serwerem czas wykonywania serwera wywołuje tę procedurę w celu wykonania dowolnego wymaganego czyszczenia. Aby uzyskać więcej informacji na temat procedur uruchamiania kontekstu, zobacz Server Context Run-down Routine.
Interfejs używający uchwytu kontekstu musi posiadać uchwyt do początkowego powiązania, które musi być wykonane, zanim serwer będzie mógł zwrócić uchwyt kontekstu. Aby utworzyć powiązanie i ustanowić kontekst, można użyć dojścia powiązania automatycznego, niejawnego lub jawnego.
Uchwyt kontekstu musi mieć typ void * lub typ, który rozwiązuje się do void *. Program serwera rzutuje go na wymagany typ.
Notatka
Użycie [w, w kontekście] dla parametrów obsługi kontekstu jest odradzane z wyjątkiem rutyn zamykających uchwyty kontekstu. Jeśli kontekst obsługuje parametry oznaczone jako [w, są używane ], nie przekazuj null ani niezainicjowanego dojścia kontekstu z klienta do serwera. Zamiast tego należy przekazać wskaźnik NULL do uchwytu kontekstu. Należy pamiętać, że parametry obsługi kontekstu oznaczone [w] nie akceptują wskaźników NULL.
Poniższy fragment przykładowej definicji interfejsu pokazuje, jak aplikacja rozproszona może używać dojścia kontekstu, aby otworzyć serwer i zaktualizować plik danych dla każdego klienta.
Interfejs musi zawierać zdalne wywołanie procedury, aby zainicjować uchwyt i ustawić go na wartość inną niżnull. W tym przykładzie funkcja RemoteOpen wykonuje tę operację. Określa uchwyt kontekstu z atrybutem kierunkowym [out]. Alternatywnie można zwrócić uchwyt kontekstu jako wartość zwracaną przez procedurę. Jednak w tym przykładzie przekażemy obsługę kontekstu za pośrednictwem listy parametrów.
W tym przykładzie informacje kontekstowe są dojściem do pliku. Śledzi bieżącą lokalizację w pliku. Interfejs pakuje uchwyt pliku jako uchwyt kontekstu i przekazuje go jako parametr do zdalnych wywołań procedur. Struktura zawiera nazwę pliku i uchwyt pliku.
/* file: cxhndl.idl (fragment of interface definition file) */
typedef [context_handle] void * PCONTEXT_HANDLE_TYPE;
typedef [ref] PCONTEXT_HANDLE_TYPE * PPCONTEXT_HANDLE_TYPE;
short RemoteOpen([out] PPCONTEXT_HANDLE_TYPE pphContext,
[in, string] unsigned char * pszFile);
void RemoteRead(
[in] PCONTEXT_HANDLE_TYPE phContext,
[out, size_is(cbBuf)] unsigned char achBuf[],
[in, out] short *pcbBuf);
short RemoteClose([in, out] PPCONTEXT_HANDLE_TYPE pphContext);
Funkcja RemoteOpen tworzy prawidłowy, inny niżdojście kontekstu o wartości null. Przekazuje dojście kontekstu do klienta. Kolejne zdalne wywołania procedur, takie jak RemoteRead, używają uchwytu kontekstu jako wskaźnika wejściowego.
Oprócz procedury zdalnej, która inicjuje uchwyt kontekstu, interfejs musi zawierać procedurę, która zwalnia kontekst serwera i ustawia uchwyt kontekstu, aby null. W poprzednim przykładzie funkcja RemoteClose wykonuje tę operację.