使用啟用內容 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);