Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genellikle, IDL dosyasındaki bir tür tanımında [context_handle] özniteliğini belirterek bir bağlam tanıtıcısı oluşturursunuz. Tür tanımı, sağlamanız gereken bir bağlam tamamlama rutinini de örtük olarak belirtir. İstemci ve sunucu arasındaki iletişim kesilirse, sunucu çalışma süresi gerekli temizleme işlemlerini gerçekleştirmek için bu yordamı çağırır. Bağlam aşağı çalıştırma yordamları hakkında daha fazla bilgi için bkz. Sunucu Bağlamı Aşağı Çalıştırma Yordamı.
Bağlam tutamacını kullanan bir arabirimin, sunucunun bağlam tutamacını döndürebilmesi için önce gerçekleşmesi gereken ilk bağlama için bir bağlama tanıtıcısı olmalıdır. Otomatik, örtük veya açık bağlama tutamacını kullanarak bağlamayı oluşturabilir ve bağlamı kurabilirsiniz.
Bağlam tutamacı void * türünde veya void *türüne dönüşen bir yapıda olmalıdır. Sunucu programı bunu gerekli türe dönüştürür.
Not
Bağlam tanıtıcı parametreleri için [] kullanımı, bağlam tanıtıcılarını kapatan yordamlar dışında önerilmez. Bağlam tutamaçları [içinde, dışarıolarak işaretlenmiş parametreleri] işlerse, istemciden sunucuya NULL veya ilklenmemiş bir bağlam tutamacı geçirmeyin. Bunun yerine bağlam tanıtıcısına NULL işaretçisi geçirilmelidir. Lütfen [in] olarak işaretlenen bağlam tanıtıcısı parametrelerinin NULL işaretçilerini kabul etmediğini unutmayın.
Örnek arabirim tanımının aşağıdaki parçası, dağıtılmış bir uygulamanın bir sunucunun açık olması ve her istemci için bir veri dosyasını güncelleştirmesi için bağlam tutamacını nasıl kullanabileceğini gösterir.
Arabirim, tanıtıcıyı başlatmak venull olmayan bir değerine ayarlamak için bir uzak yordam çağrısı içermelidir. Bu örnekte RemoteOpen işlevi bu işlemi gerçekleştirir. Bağlam tutamacını [out] yön özniteliğiyle belirtir. Alternatif olarak, bağlam tutamacını yordamın dönüş değeri olarak döndürebilirsiniz. Ancak bu örnekte bağlam tutamacını parametre listesinden geçireceğiz.
Bu örnekte bağlam bilgileri bir dosya tanıtıcısıdır. Dosyadaki geçerli konumu izler. Arayüz, dosya tutamacını bağlam tanıtıcısı olarak paketler ve uzak yordam çağrılarına parametre olarak iletir. Yapı, dosya adını ve dosya tutamacını içerir.
/* 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);
RemoteOpen işlevi geçerli,olmayan bir null bağlam tanıtıcısı oluşturur. kontekst sapını istemciye geçirir. RemoteRead gibi sonraki uzak yordam çağrılarında, bağlam tutamacı girdi işaretçisi olarak kullanılır.
Bağlam tutamacını başlatan uzak yordama ek olarak, arabirim sunucu bağlamını serbest bırakır ve bağlam tutamacını null olarak ayarlayan bir yordam içermelidir. Yukarıdaki örnekte RemoteClose işlevi bu işlemi gerçekleştirir.