クラスまたは同様の C++ コンテナー内に MFC リソースを埋め込むことはできません。それらは、生成されたバイナリの別のセクションで、DLL または EXE ファイルにのみ埋め込むことができます。クラスを再利用可能にしたいので、それを DLL に入れる必要があります。したがって、AFX_EXT_CLASSキーワードを使用してクラスにタグを付ける必要があります。
解決策は 2 つあります。
解決策 1:
- MFC DLL プロジェクトを作成します (
MFC Extension DLL
)。それを呼び出すMyLibrary
か、何でもします。
- すべてのスタンドアロン クラスをこの DLL に入れます。
- 必要なすべてのリソースを組み込みます。
HINSTANCE
以下で説明するように、クラスが DLLからリソースをロードできるようにします。
HINSTANCE
DLLの を取得するには、いくつかの方法があります。あなたが私に尋ねるなら、最善の解決策はそれをつかむことですDllMain
. MFC Extension DLL
構成を選択すると、これは自動的に行われます。
static AFX_EXTENSION_MODULE MyLibDLL = { NULL, NULL }; // Make this variable global!
// Then access the hInstance as follows:
LoadResource(MyLibDLL.hModule, ...)
解決策 2:
リソースをバイト バッファーとして格納します。または、 Base64に変換してASCII 文字列として保存することをお勧めします。ただし、スタックを吹き飛ばさないように注意してください。リソースを小さく保つか、プロジェクト設定でスタック サイズを増やしてください。例:
const char *encodedResource = "SGVsbG8gd29ybGQh";
char *data = decode(encodedResource);
foo(data);