Použití API pro kontext aktivace
Aplikace můžou spravovat kontext aktivace přímým voláním funkcí kontextu aktivace. Kontexty aktivace jsou datové struktury v paměti. Systém může pomocí informací v aktivačním kontextu přesměrovat aplikaci k načtení konkrétní verze knihovny DLL, instance objektu COM nebo vlastní verze okna. Další informace naleznete v tématu Referenční dokumentace ke kontextu aktivace.
Aplikační programovací rozhraní (API) lze použít ke správě kontextu aktivace a k vytvoření objektů pojmenovaných verzí s manifesty. Následující dva scénáře ilustrují, jak může aplikace spravovat kontext aktivace přímo voláním funkcí kontextu aktivace. Ve většině případů ale systém spravuje kontext aktivace. Vývojáři aplikací a poskytovatelé sestavení obvykle nemusí provádět operace se zásobníkem pro správu aktivačního kontextu.
Procesy a aplikace, které implementují nepřímé nebo dispečovací vrstvy.
Například uživatel, který spravuje kontexty aktivace ve smyčce událostí. Při každém přístupu k oknu, například přesunutím myši přes okno, se volá ActivateActCtx, který aktivuje aktuální kontext aktivace prostředku, jak je znázorněno v následujícím fragmentu kódu.
HANDLE hActCtx;
CreateWindow();
...
GetCurrentActCtx(&ActCtx);
...
ReleaseActCtx(&ActCtx);
V následujícím fragmentu kódu aktivuje funkce API příslušné kontexty aktivace před voláním CallWindowProc. Když se volá CallWindowProc, použije tento kontext k předání zprávy systému Windows. Jakmile jsou dokončeny všechny operace s prostředky, funkce deaktivuje kontext.
ULONG_PTR ulpCookie;
HANDLE hActCtx;
if(ActivateActCtx(hActCtx, &ulpCookie))
{
...
CallWindowProc(...);
...
DeactivateActCtx(0, ulpCookie);
}
Vrstva odeslání delegátoru.
Tento scénář platí pro správce, kteří spravují více entit se společnou vrstvou rozhraní API, jako je například správce ovladačů. I když ještě nebyla implementována, příkladem by byl ovladač ODBC.
V tomto scénáři se střední vrstva stává schopnou zpracovávat vazby komponentů. Chcete-li získat ovladač vazby specifické pro verzi, musí vydavatelé poskytnout manifest a určit závislosti na konkrétních komponentách v daném manifestu. Základní aplikace není dynamicky svázaná s komponentami; v době běhu spravuje správce ovladačů volání. Při volání ovladače ODBC na základě připojovacího řetězce načte příslušný ovladač. Pak vytvoří kontext aktivace pomocí informací v souboru manifestu sestavení.
Bez manifestu je výchozí akcí pro ovladač použít stejný kontext, jaký určila aplikace – v tomto příkladu verze 2 MSVCRT. Vzhledem k tomu, že manifest existuje, vytvoří se samostatný kontext aktivace. Když se ovladač ODBC spustí, vytvoří vazbu na verzi 1 sestavení MSVCRT.
Pokaždé, když správce ovladačů zavolá vrstvu dispečera , například k získání další sady dat, použije příslušná sestavení na základě kontextu aktivace. Následující fragment kódu to ilustruje.
HANDLE hActCtx;
ULONG_PTR ulpCookie;
ACTCTX ActCtxToCreate = {...};
hActCtx = CreateActCtx(&ActCtxToCreate);
...;
if (ActivateActCtx(hActCtx, &ulpCookie))
{
...
ConnectDb(...);
DeactivateActCtx(0, ulpCookie);
}
...
ReleaseActCtx(hActCtx);