Sdílet prostřednictvím


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