Sdílet prostřednictvím


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 AfxFunctionName, 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.