共用方式為


context_handle屬性

[context_handle] 屬性識別一個綁定句柄,該代碼在遠端程序呼叫間維持伺服器上的上下文或狀態資訊。

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); ]

參數

類型-屬性-列表

指定一個或多個適用於該型別的屬性。

型別指定器

指定指標類型或類型識別碼。 可選的儲存規格在 類型指定符之前。

宣告者與宣告者列表

規範標準 C 宣告符,如識別碼、指標宣告符及陣列宣告符。 上下文句柄的宣告符必須至少包含一個指標宣告器。 欲了解更多資訊,請參閱 陣列與 Sized-Pointer 屬性陣列,以及 陣列與指標聲明符列表由一個或多個聲明符組成,並以逗號分隔。 函式聲明器中的參數名稱識別碼為可選。

function-attr-list

指定零個或多個屬性適用於函數。 有效的函式屬性有 [callback]、[local];指標屬性 [ref]、[unique][ptr];以及使用屬性 [string]、[ignore][context_handle]。

PTR-DECL

指定零個或多個指標聲明符。 指標聲明符與 C 語言中使用的指標聲明符相同;它是由 * 指示符、修飾符如 FAR 以及限定詞 const 組成。

函數名稱

指定遠端程序的名稱。

參數-屬性-列表

指定零個或多個方向屬性、欄位屬性、使用屬性及指標屬性,適用於指定參數類型。 用逗號分隔多個屬性。

context-handle-類型

指定一個識別碼,該識別碼在 typedef 宣告中定義了 [context_handle] 屬性。 這個流程是可選的。

Windows Server 2003 及 Windows XP: 單一介面可同時支援序列化與非序列化的上下文句柄,使介面上的一個方法能獨佔(序列化)存取該上下文句柄,而其他方法則以共享模式存取該上下文句柄(非序列化)。 這些存取能力可與讀寫鎖定機制相提並論;使用序列化上下文句柄的方法為專屬使用者(寫入者),而使用非序列化上下文句柄的方法則為共享使用者(讀取器)。 銷毀或修改上下文句柄狀態的方法必須序列化。 不修改上下文句柄狀態的方法,例如僅從上下文句柄讀取的方法,可以被列為非序列化。 請注意,建立方法是隱含序列化的。

備註

[context_handle] 屬性可以以 IDL 的 typedef 類型屬性、函式回傳類型屬性,或參數屬性出現。 當你對型別定義套用 [context_handle] 屬性時,也必須提供上下文的詳細說明例程。 詳情請參閱 伺服器上下文執行例程

當你以預設(/ms_ext)模式使用 MIDL 編譯器時,上下文句柄可以是使用者選擇的任何指標類型,只要符合此處描述的上下文句柄要求即可。 與此類上下文處理型態相關的資料不會在網路上傳輸,僅應由伺服器應用程式操作。 DCE IDL 編譯器限制上下文句柄的指標為 void* 型別。 因此,使用 MIDL 編譯器 /osf 交換器時無法使用此功能。

與其他句柄類型相同,上下文句柄對用戶端應用程式是不透明的,且與之相關的資料不會被傳送。 在伺服器端,上下文句柄作為主動上下文的句柄,所有與上下文句柄類型相關聯的資料皆可存取。

要建立上下文句柄,客戶端會將一個 [out]、[ref] 指標傳給伺服器,指向上下文句柄。 (上下文處理件本身可以是 NULL 或非 NULL 值——只要其值與指標屬性一致。例如,當上下文處理型別套用了 [ref] 屬性時,該值不可能為 NULL 。)在建立上下文句柄之前,必須提供另一個綁定句柄來完成綁定。 當未指定明確的句柄時,則使用隱含綁定。 當沒有 [implicit_handle] 屬性時,會使用自動句柄。

伺服器端的遠端程序會建立一個主動上下文句柄。 用戶端必須在後續呼叫中將該上下文句柄作為 [in][inout] 參數使用。 僅在 [in] 的上下文句柄可以用作綁定句柄,因此必須有非 NULL 值。 僅在 [in] 的上下文處理碼不會反映伺服器上的狀態變更。

在伺服器端,被呼叫的程序可依需求解讀上下文句柄。 例如,被呼叫的程序可以分配堆積儲存,並使用上下文句柄作為指向該儲存的指標。

要關閉上下文句柄,客戶端會以 [in]、[out] 參數傳遞該上下文句柄。 當伺服器不再代表呼叫者維護上下文時,必須回傳一個 NULL 上下文句柄。 例如,如果上下文句柄代表一個開啟的檔案,而呼叫會關閉該檔案,伺服器必須將上下文處理柄設為 NULL ,並將它回傳給用戶端。 NULL 值在後續呼叫中作為綁定句柄無效。

上下文句柄只能對一個伺服器有效。 當函式有兩個句柄參數且上下文句柄不是 NULL 時,綁定句柄必須指向相同的位址空間。

當函式擁有 [in][inout] 上下文句柄時,其上下文handle可作為綁定handle使用。 此時不使用隱含綁定,且忽略 [implicit_handle][auto_handle] 屬性。

以下限制適用於上下文帳號:

  • 上下文句柄不能是陣列元素、結構成員或聯集成員。 它們只能是參數。
  • 上下文句柄不能有 [transmit_as][represent_as] 屬性。
  • 指向 [out] 上下文handle的參數必須是 [reference] 指標。
  • [in] context handle 可以作為綁定 handle,且不能是 NULL。
  • [入上下文句柄在輸入時可以為 NULL,但前提是程序有其他明確的句柄參數。 若沒有其他明確的非 NULL 上下文句柄參數,則 [inout] 上下文句柄不可能為 NULL。
  • 上下文句柄不能用於回調。

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);

另請參閱

陣列

auto_handle

回傳

用戶端上下文重置

接續

上下文帳號

把手

裝訂與握把

忽略

implicit_handle

本地

多執行緒客戶端與上下文句柄

/ms_ext

出去

PTR

參考資料

represent_as

RpcSsDestroyClientContext

伺服器上下文執行例程

字串

transmit_as

typedef

獨一無二

虛無