Udostępnij za pośrednictwem


Izolacja biblioteki formantów wspólnych MFC

Biblioteka Wspólnych kontrolek jest teraz izolowana w MFC, umożliwiając korzystanie z różnych modułów (takich jak biblioteki DLL użytkowników) przez określenie wersji w manifestach.

Aplikacja MFC (lub kod użytkownika wywoływany przez MFC) wykonuje wywołania interfejsów API biblioteki Common Controls za pośrednictwem funkcji otoki o nazwie AfxFunctionName, gdzie FunctionName jest nazwą interfejsu API wspólnych kontrolek. Te funkcje otoki są zdefiniowane w afxcomctl32.h i afxcomctl32.inl.

Możesz użyć makr AFX_COMCTL32_IF_EXISTS i AFX_COMCTL32_IF_EXISTS2 (zdefiniowanych w pliku afxcomctl32.h), aby określić, czy biblioteka Common Controls implementuje określony interfejs API zamiast wywoływać metodę GetProcAddress.

Technicznie wykonujesz wywołania interfejsów API biblioteki wspólnych kontrolek za pośrednictwem klasy CComCtlWrapper otoki (zdefiniowanej w afxcomctl32.h). CComCtlWrapper jest również odpowiedzialny za ładowanie i zwalnianie pliku comctl32.dll. Stan modułu MFC zawiera wskaźnik do wystąpienia klasy CComCtlWrapper. Dostęp do klasy otoki można uzyskać za pomocą makra afxComCtlWrapper .

Należy pamiętać, że bezpośrednie wywoływanie interfejsu API wspólnych kontrolek (nie przy użyciu funkcji otoki MFC) z aplikacji MFC lub biblioteki DLL użytkownika będzie działać w większości przypadków, ponieważ aplikacja MFC lub biblioteka DLL użytkownika jest powiązana z biblioteką common controls żądaną w manifeście. Jednak sam kod MFC musi używać otoki, ponieważ kod MFC może być wywoływany z bibliotek DLL użytkownika z różnymi wersjami bibliotek common controls.