次の方法で共有


MFC コモン コントロール ライブラリの分離

コモン コントロール ライブラリは MFC 内に分離されるようになりました。そのため、さまざまなモジュール (ユーザー DLL など) が、マニフェストでバージョンを指定することで、さまざまなバージョンのコモン コントロール ライブラリを使用できます。

MFC アプリケーション (または MFC によって呼び出されるユーザー コード) は、AfxFunctionName という名前のラッパー関数を介して、コモン コントロール ライブラリ API を呼び出します。ここで、FunctionName は、コモン コントロール API の名前です。 これらのラッパー関数は、afxcomctl32.h および afxcomctl32.inl で定義されています。

GetProcAddress を呼び出す代わりに、AFX_COMCTL32_IF_EXISTS および AFX_COMCTL32_IF_EXISTS2 マクロ (afxcomctl32.h 内で定義) を使用して、コモン コントロール ライブラリが特定の API を実装しているかどうかを判断できます。

技術的には、ラッパー クラス CComCtlWrapper (afxcomctl32.h 内で定義) を介して、コモン コントロール ライブラリ API を呼び出します。 CComCtlWrapper では、comctl32.dll の読み込みと読み込み解除も行います。 MFC のモジュール状態には、CComCtlWrapper のインスタンスへのポインターが含まれています。 afxComCtlWrapper マクロを使用して、ラッパー クラスにアクセスできます。

MFC アプリケーションまたはユーザー DLL は、そのマニフェスト内で要求しているコモン コントロール ライブラリにバインドされているため、MFC アプリケーションまたはユーザー DLL からコモン コントロール API を直接 (MFC ラッパー関数を使用せずに) 呼び出しても、多くの場合は機能することに注意してください。 ただし、MFC コード自体は、別のコモン コントロール ライブラリ バージョンのユーザー DLL から呼び出される可能性があるため、ラッパーを使用する必要があります。