Common Controls ライブラリが MFC 内で分離され、さまざまなモジュール (ユーザー DLL など) がマニフェストでバージョンを指定することで、異なるバージョンの Common Controls ライブラリを使用できるようになりました。
MFC アプリケーション (または MFC によって呼び出されたユーザー コード) は、Afx
が Common Controls API の名前である FunctionName というラッパー関数を介して Common Controls ライブラリ API を呼び出します。 これらのラッパー関数は、afxcomctl32.h および afxcomctl32.inl で定義されています。
AFX_COMCTL32_IF_EXISTSマクロとAFX_COMCTL32_IF_EXISTS2 マクロ (afxcomctl32.h で定義) を使用して、共通コントロール ライブラリが GetProcAddress を呼び出す代わりに特定の API を実装しているかどうかを判断できます。
技術的には、ラッパー クラス (afxcomctl32.h で定義) CComCtlWrapper
を介して Common Controls Library API を呼び出します。
CComCtlWrapper
は、comctl32.dllの読み込みとアンロードも担当します。 MFC モジュールの状態には、 CComCtlWrapper
のインスタンスへのポインターが含まれています。 ラッパー クラスには、 afxComCtlWrapper
マクロを使用してアクセスできます。
MFC アプリケーションまたはユーザー DLL はマニフェストで要求した Common Controls ライブラリにバインドされているため、MFC アプリケーションまたはユーザー DLL から (MFC ラッパー関数を使用せず) Common Controls API を直接呼び出すと、ほとんどの場合機能することに注意してください。 ただし、MFC コード自体はラッパーを使用する必要があります。MFC コードは、共通コントロール ライブラリのバージョンが異なるユーザー DLL から呼び出される可能性があるためです。