使用內容控制碼進行介面開發

一般而言,您會在 IDL 檔案的類型定義上指定 [coNtext_handle] 屬性,以建立內容控制碼。 類型定義也會隱含地指定您必須提供的內容執行常式。 如果用戶端與伺服器之間的通訊中斷,伺服器執行時間會叫用此常式來執行任何必要的清除。 如需內容執行常式的詳細資訊,請參閱 伺服器內容執行常式

使用內容控制碼的介面必須具有初始系結的系結控制碼,必須先進行,伺服器才能傳回內容控制碼。 您可以使用自動、隱含或明確的系結控制碼來建立系結並建立內容。

內容控制碼必須是 void * 類型,或解析為 void *的類型。 伺服器程式會將它轉換成必要的類型。

注意

除了關閉內容控制碼的常式之外,不建議對內容控制碼參數使用 [inout]。 如果使用標示為 [inout] 的參數,請勿將 Null 或未初始化的內容控制碼從用戶端傳遞至伺服器。 應該改為傳遞內容控制碼的 Null 指標。 請注意,標示為 [in] 的內容控制碼參數不接受 Null 指標。

 

下列範例介面定義的片段示範分散式應用程式如何使用內容控制碼,讓伺服器開啟並更新每個用戶端的資料檔。

介面必須包含遠端程序呼叫,才能初始化控制碼,並將其設定為非Null 值。 在此範例中,RemoteOpen 函式會執行這項作業。 它會指定具有 [out] 方向屬性的內容控制碼。 或者,您可以將內容控制碼當做程式的傳回值傳回。 不過,在此範例中,我們將透過參數清單傳遞內容控制碼。

在此範例中,內容資訊是檔案控制代碼。 它會追蹤檔案中的目前位置。 介面會將檔案控制代碼封裝為內容控制碼,並將它當做參數傳遞給遠端程序呼叫。 結構包含檔案名和檔案控制代碼。

/* 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 函式會建立有效的非Null 內容控制碼。 它會將內容控制碼傳遞至用戶端。 後續的遠端程序呼叫,例如 RemoteRead,請使用內容控制碼做為指標中的 。

除了初始化內容控制碼的遠端程式之外,介面還必須包含釋放伺服器內容並將內容控制碼設定為 Null的程式。 在上述範例中,RemoteClose 函式會執行這項作業。