文書番号: 150121
最終更新日: 2003/07/22
この資料は以下の製品について記述したものです。
- The Microsoft Foundation Classes (MFC) を以下の環境でお使いの場合
- Microsoft Visual C++ for Windows, 16-bit edition 1.0
- Microsoft Visual C++ for Windows, 16-bit edition 1.5
- Microsoft Visual C++ for Windows, 16-bit edition 1.51
- Microsoft Visual C++ for Windows, 16-bit edition 1.52
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 2.2
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
この記事は、以前は次の ID で公開されていました: JP150121
概要
MFC 拡張 DLL (AFXDLL) における、CBitmap::LoadBitmap、CMenu::LoadMenu、CString::LoadString などリソースを読み込む MFC 関数が正しいリソースを読み込まないことがあります。拡張 DLL 内の適切なリソースではなく、アプリケーション内のリソースが読み込まれるされることもあります。
原因
拡張 DLL 内のリソースでなくアプリケーションや他の拡張 DLL 内のリソースが読み込まれる現象は、多くの場合、不適切なリソース管理が原因です。MFC アプリケーションや MFC 拡張 DLL は、グローバルに結ばれた 1 つのリソース (リソース チェイン) です。結ばれた個々のモジュール間に同じ ID 値を持つ複数のリソースが存在する場合、MFC は ID 値から見つけた最初のリソースを使用します。MFC は、アプリケーション内のリソースを拡張 DLL よりも先に検索するため、最初のリソースはアプリケーションから見つけられることがよくあります。
解決方法
アプリケーションとアプリケーションが使用する拡張 DLL における全てのリソースにおいて、ID 値を重複しない一意な値に変更します。これらの値は、プロジェクトの resource.h にて定義されており、リソース エディタ (Visual C++ 1.x では AppStudio) のシンボル ブラウザで変更できます。
シンボルの値が重複しないことを保証するためには、モジュール (ビルド単位) ごとに範囲の異なる ID 値を 1 から 0x6FFFF の間で割り当てます。それぞれのモジュールで、リソースを作成する前に resource.h に _APS_NEXT_RESOURCE_VALUE を定義することで、そのモジュールにおける ID 値の最小値を設定してください。リソース エディタは、次に作成されるリソースの ID をこのシンボルから決定します。
この技法は、MFC テクニカルノート 35 および Visual C++ に含まれているサンプル DLLHUSK において紹介されています。
関連情報
拡張 DLL
MFC テクニカル ノート 33
DLLHUSK サンプル
リソース管理
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
150121
(最終更新日 1999-03-19) をもとに作成したものです。
Keywords: KBPRB VC10 VC15 VC20 VC40 VC41 VC42 VC4x VC50 キャッシュ KB150121
Technology: kbAudDeveloper kbMFC kbvc100 kbvc150 kbVC151 kbVC152 kbVC16bitSearch kbVC200 kbVC210 kbVC220 kbVC32bitSearch kbVC400 kbVC410 kbVC420 kbVC500 kbVC500Search kbVC600 kbVCsearch