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.
[context_handle] özniteliği, uzak yordam çağrıları arasında sunucuda bağlamı veya durum bilgilerini koruyan bir bağlama tutamacını tanımlar.
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); ]
Parametreler
-
type-attribute-list
-
Türe uygulanan bir veya daha fazla özniteliği belirtir.
-
type-specifier
-
bir işaretçi türü veya tür tanımlayıcısı belirtir. İsteğe bağlı bir depolama belirtimi , tür belirticiden önce gelebilir.
-
bildirimci ve bildirimci-listesi
-
Tanımlayıcılar, işaretçi bildirimcileri ve dizi bildirimcileri gibi standart C bildirimcilerini belirtir. Bağlam tanıtıcısının bildirimcisi en az bir işaretçi bildirimcisi içermelidir. Daha fazla bilgi için bkz . Dizi ve Sized-Pointer Öznitelikleri, diziler ve Diziler ve İşaretçiler. Bildirimci-listesi virgülle ayrılmış bir veya daha fazla bildirimciden oluşur. İşlev bildirimcisindeki parametre adı tanımlayıcısı isteğe bağlıdır.
-
function-attr-list
-
İşlev için geçerli olan sıfır veya daha fazla özniteliği belirtir. Geçerli işlev öznitelikleri şunlardır: [callback], [local]; işaretçi özniteliği [ref], [unique] veya [ptr]; ve [string], [ignore] ve [context_handle] kullanım öznitelikleri.
-
ptr-decl
-
Sıfır veya daha fazla işaretçi bildirimcisi belirtir. İşaretçi bildirimcisi, C'de kullanılan işaretçi bildirimcisi ile aynıdır; belirleyiciden, uzak gibi değiştiricilerden ve niteleyici sabitleyicisinden* oluşturulur.
-
işlev-adı
-
Uzak yordamın adını belirtir.
-
parameter-attribute-list
-
Belirtilen parametre türüne uygun sıfır veya daha fazla yönlü öznitelik, alan öznitelikleri, kullanım öznitelikleri ve işaretçi özniteliklerini belirtir. Birden çok özniteliği virgülle ayırın.
-
bağlam tutamacı türü
-
[context_handle] özniteliğini alan bir typedef bildiriminde tanımlandığı gibi bağlam tanıtıcı türünü belirten tanımlayıcıyı belirtir. Rundown yordamı isteğe bağlıdır.
Windows Server 2003 ve Windows XP: Tek bir arabirim hem serileştirilmiş hem de serileştirilmemiş bağlam tanıtıcılarını barındırabilir ve arabirimde tek bir yöntemin özel olarak (serileştirilmiş) bir bağlam tanıtıcısına erişmesini sağlarken, diğer yöntemler bu bağlam tutamacını paylaşılan modda (seri olmayan) eriştirebilir. Bu erişim özellikleri okuma/yazma kilitleme mekanizmalarıyla karşılaştırılabilir; serileştirilmiş bağlam tutamacını kullanan yöntemler özel kullanıcılardır (yazıcılar), seri durumdan çıkarılmamış bağlam tutamacını kullanan yöntemler paylaşılan kullanıcılardır (okuyucular). Bağlam tanıtıcısının durumunu yok eden veya değiştiren yöntemler seri hale getirilmelidir. Bağlam tutamacının durumunu değiştirmeyen yöntemler( örneğin, bir bağlam tutamacından okuyan yöntemler) seri durumdan çıkarılamaz. Oluşturma yöntemlerinin örtük olarak seri hale getirildiğini unutmayın.
Açıklamalar
[context_handle] özniteliği IDL typedef tür özniteliği, işlev dönüş türü özniteliği veya parametre özniteliği olarak görünebilir. [context_handle] özniteliğini bir tür tanımına uyguladığınızda, bağlam çalıştırma yordamı da sağlamanız gerekir. Ayrıntılar için bkz. Sunucu Bağlamı Çalıştırma Yordamı .
MIDL derleyicisini varsayılan (/ms_ext) modunda kullandığınızda, bağlam tutamacı, burada açıklanan bağlam tanıtıcıları gereksinimleriyle uyumlu olduğu sürece kullanıcı tarafından seçilen herhangi bir işaretçi türü olabilir. Bu tür bir bağlam tanıtıcı türüyle ilişkili veriler ağda iletilmez ve yalnızca sunucu uygulaması tarafından işlenmelidir. DCE IDL derleyicileri bağlam tanıtıcılarını void* türünde işaretçilerle kısıtlar. Bu nedenle, MIDL derleyicisi /osf anahtarını kullandığınızda bu özellik kullanılamaz.
Diğer tanıtıcı türlerinde olduğu gibi, bağlam tutamacı istemci uygulaması için opaktır ve onunla ilişkili veriler iletilmez. Sunucuda, bağlam tutamacı etkin bağlamda tanıtıcı görevi görür ve bağlam tanıtıcı türüyle ilişkili tüm verilere erişilebilir.
Bağlam tanıtıcısı oluşturmak için istemci sunucuya bir bağlam tutamacını [out], [ref] işaretçisini geçirir. (Bağlam tanıtıcısının kendisi , değeri işaretçi öznitelikleriyle tutarlı olduğu sürece NULL veya NULL olmayan bir değere sahip olabilir. Örneğin, bağlam tanıtıcı türüne [ref] özniteliği uygulandığında NULL değeri olamaz.) Bağlam tanıtıcısı oluşturulana kadar bağlamayı gerçekleştirmek için başka bir bağlama tanıtıcısı sağlanmalıdır. Açık tanıtıcı belirtilmediğinde örtük bağlama kullanılır. [implicit_handle] özniteliği olmadığında otomatik tanıtıcı kullanılır.
Sunucudaki uzak yordam etkin bir bağlam tutamacı oluşturur. İstemcinin sonraki çağrılarda[in] veya [in, out] parametresi olarak bu bağlam tutamacını kullanması gerekir. Bağlama tanıtıcısı olarak [in]-only bağlam tutamacı kullanılabilir, bu nedenle NULL olmayan bir değere sahip olmalıdır. [in]-only bağlam tutamacı sunucudaki durum değişikliklerini yansıtmaz.
Sunucuda, çağrılan yordam bağlam tutamacını gerektiği gibi yorumlayabilir. Örneğin, çağrılan yordam yığın depolamayı ayırabilir ve bağlam tutamacını bu depolamanın işaretçisi olarak kullanabilir.
Bir bağlam tutamacını kapatmak için istemci bağlam tutamacını [in], [out] bağımsız değişkeni olarak geçirir. Artık çağıran adına bağlamı korumadığında sunucunun null bağlam tanıtıcısı döndürmesi gerekir. Örneğin, bağlam tutamacı açık bir dosyayı temsil ederse ve çağrı dosyayı kapatırsa, sunucunun bağlam tutamacını NULL olarak ayarlaması ve istemciye döndürmesi gerekir. Sonraki çağrılarda bağlama tanıtıcısı olarak NULL değeri geçersiz.
Bağlam tanıtıcısı yalnızca bir sunucu için geçerlidir. bir işlevin iki tanıtıcı parametresi olduğunda ve bağlam tutamacı NULL değilse, bağlama tanıtıcıları aynı adres alanına başvurmalıdır.
bir işlevin [in] veya [in, out] bağlam tanıtıcısı olduğunda bağlama tutamacı olarak bağlam tutamacı kullanılabilir. Bu durumda örtük bağlama kullanılmaz ve [implicit_handle] veya [auto_handle] özniteliği yoksayılır.
Bağlam tanıtıcıları için aşağıdaki kısıtlamalar geçerlidir:
- Bağlam tanıtıcıları dizi öğeleri, yapı üyeleri veya birleşim üyeleri olamaz. Bunlar yalnızca parametre olabilir.
- Bağlam tanıtıcıları [transmit_as] veya [represent_as] özniteliğine sahip olamaz.
- [out] bağlam tanıtıcılarının işaretçileri olan parametreler [başv] işaretçileri olmalıdır.
- Bağlama tutamacı olarak [in] bağlam tutamacı kullanılabilir ve NULL olamaz.
- [in, out bağlam tutamacı girişte NULL olabilir, ancak yalnızca yordamda başka bir açık tanıtıcı parametresi varsa. Null olmayan başka açık bağlam tanıtıcı parametresi yoksa, [in, out] bağlam tutamacı NULL olamaz.
- Bağlam tutamacı geri çağırmalarla kullanılamaz.
Örnekler
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);
Ayrıca bakınız