AFX_MANAGE_STATE
は、特定の関数が呼び出されるEXE/DLLではなく、このDLL内でのみリソースが参照されるようにリソース関数を呼び出すマクロです。このマクロはまた、AFX_MAINTAIN_STATE
クラスをスタックに配置します。このクラスは、関数の終了時にリソースルックアップをリセットするので、このエクスポートされた関数を呼び出したEXE/DLLはリソース検索を元に戻します。 C++用語で
:
// Some exported function that launches GUI or uses other resources
int GetSomething()
{
AFX_MANAGE_STATE();
...
}
は何か(ない正確に)のようになる:同じDLL呼び出しスタック内のこのマクロの
int GetSomething()
{
SetResourceSearchingToThisDLL();
AFX_MAINTAIN_STATE state_RAII;
//Use resource
// Compiler will put destroctor call for state_RAII object here
// which will mean AFX_MAINTAIN_STATE::~AFX_MAINTAIN_STATE()
// And that would call something like:
ResetResourceSearching();
}
使用法は、文句を言わない資源探索するので、誰も傷つけには、使用カウンタがいくつかあります。これは、呼び出し元(DLL/EXEリソース)が0になった場合にのみ復帰します。
重要な点は、すべてのMFC DLLはこのマクロを使用する必要があります。 DLLが非MFCクライアントによって読み込まれ、Cクライアント、C++コンソールベースのアプリケーション、.NETクライアントなどである場合のみです(はい、MFC Windowsアプリケーションクライアントでも可能です)。
EXEとDLLが同じMFC /コンパイラ/リンカバージョンを使用してMFCで作成され、1つのCWinApp
オブジェクトを持つ場合、このマクロを使用する必要はありません。
Microsoftテクニカルノート058、MFCモジュール状態の実装には、AFX_MANAGE_STATEの使用に関するいくつかの追加情報があります。 https://msdn.microsoft.com/en-us/library/vstudio/ft1t4bbc(v=vs.100).aspx少し古いかもしれませんが。 –