使用啟動上下文 API
應用程式可以透過直接呼叫啟用內容函式來管理 啟用內容。 啟用上下文是記憶體中的資料結構。 系統可以使用啟用內容中的資訊,將應用程式重新導向以載入特定的 DLL 版本、COM 物件實例或自訂視窗版本。 如需詳細資訊,請參閱 啟用內容參考。
應用程式設計介面(API)可以用來管理啟動上下文,並使用 清單建立具版本名稱的物件。 下列兩個案例說明應用程式如何呼叫激活上下文函式來管理激活上下文。 不過,在大部分情況下,啟用內容是由系統管理。 應用程式開發人員和元件提供者通常不需要呼叫堆疊來管理啟用內容。
實作間接或分派層的程序和應用程式。
例如,在事件迴圈中管理激活上下文的使用者。 每次存取視窗時,例如將滑鼠移至視窗上方,呼叫 ActivateActCtx,這會啟動資源的目前啟用內容,如下列代碼段所示。
HANDLE hActCtx;
CreateWindow();
...
GetCurrentActCtx(&ActCtx);
...
ReleaseActCtx(&ActCtx);
在下列代碼段中,API 函式會先啟動適當的啟用內容,再呼叫 CallWindowProc。 呼叫 CallWindowProc 時,它會使用此內容將訊息傳遞至 Windows。 當所有資源作業都完成時,函式將會停用上下文。
ULONG_PTR ulpCookie;
HANDLE hActCtx;
if(ActivateActCtx(hActCtx, &ulpCookie))
{
...
CallWindowProc(...);
...
DeactivateActCtx(0, ulpCookie);
}
委派器分派層。
此案例適用於使用通用 API 層管理多個實體的管理員,例如驅動程式管理員。 雖然尚未實作,但其中一個範例就是 ODBC 驅動程式。
在此案例中,中間層能夠處理元件系結。 若要取得版本特定的系結驅動程式,發行者必須提供指令清單,並指定該指令清單中特定元件的相依性。 基底應用程式不會動態系結至元件;在運行時間,驅動程式管理員會管理話務。 根據連接字串呼叫 ODBC 驅動程式時,它會載入適當的驅動程式。 然後,它會使用組件清單檔案中的資訊來建立啟用上下文。
如果沒有指令清單,驅動程式的默認動作就是使用與應用程式所指定的相同內容,在此範例中為 MSVCRT 第 2 版。 由於清單確實存在,因此會建立單獨的啟用上下文。 當 ODBC 驅動程式執行時,它會系結至 MSVCRT 元件的第 1 版。
每次驅動程式管理員呼叫分派層,例如,取得下一組數據時,都會根據啟用內容使用適當的元件。 下列代碼段說明這一點。
HANDLE hActCtx;
ULONG_PTR ulpCookie;
ACTCTX ActCtxToCreate = {...};
hActCtx = CreateActCtx(&ActCtxToCreate);
...;
if (ActivateActCtx(hActCtx, &ulpCookie))
{
...
ConnectDb(...);
DeactivateActCtx(0, ulpCookie);
}
...
ReleaseActCtx(hActCtx);