Izolace knihovny běžných ovládacích prvků MFC
Knihovna Common Controls je teď izolovaná v prostředí MFC, což umožňuje různým modulům (například knihovnám DLL uživatelů) používat různé verze knihovny běžných ovládacích prvků zadáním verze v jejich manifestech.
Aplikace MFC (nebo uživatelský kód volaný prostředím MFC) volá rozhraní API knihovny Common Controls prostřednictvím obálkových funkcí s názvem Afx
FunctionName, kde FunctionName je název rozhraní API běžných ovládacích prvků. Tyto funkce obálky jsou definovány v afxcomctl32.h a afxcomctl32.inl.
Pomocí maker AFX_COMCTL32_IF_EXISTS a AFX_COMCTL32_IF_EXISTS2 (definovaných v afxcomctl32.h) můžete určit, jestli knihovna Běžných ovládacích prvků implementuje určité rozhraní API místo volání GetProcAddress.
Technicky vzato se volání rozhraní API knihovny Common Controls prostřednictvím třídy CComCtlWrapper
obálky (definované v afxcomctl32.h). CComCtlWrapper
je také zodpovědný za načítání a uvolňování comctl32.dll. Stav modulu MFC obsahuje ukazatel na instanci CComCtlWrapper
. Ke třídě obálky můžete přistupovat pomocí afxComCtlWrapper
makra.
Všimněte si, že volání rozhraní API běžných ovládacích prvků přímo (nepoužívá funkce obálky MFC) z aplikace MFC nebo knihovny DLL uživatele bude ve většině případů fungovat, protože aplikace MFC nebo knihovna DLL uživatele je svázaná s knihovnou Běžných ovládacích prvků, kterou požaduje v manifestu). Samotný kód MFC však musí používat obálky, protože kód MFC může být volána z knihoven DLL uživatelů s různými verzemi knihovny Common Controls.