Windowsアプリケーションに読み込まれるDLLは、エントリポイント(DLLMain())とそこから呼び出せる他の関数で構成されています。では、このDLLに接続するすべてのプロセスとスレッドに対して、これらの関数の中で変数をグローバルにする方法はありますか?Windows DLLのグローバル変数
現在、関数の1つが呼び出されるたびにファイルを開く/閉じる必要があります。これらの関数は非常に頻繁に呼び出されるため、毎回ファイルを開閉する実際のパフォーマンスの問題です。
wofstream wofstr;
int WINAPI func(LPCWSTR lpString)
{
...
//wofstr.open(...);
wofstr << lpString << endl; // *** NOT working without opening in this very function
...
//wofstr.close(...);
...
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
...
case DLL_PROCESS_ATTACH:
wofstr.open(...); // *** NOT seen in function above
...
case DLL_THREAD_ATTACH:
...
case DLL_THREAD_DETACH:
...
case DLL_PROCESS_DETACH:
wofstr.close(...)
...
}
私はここで何が欠けていますか?スレッドについてはどうですか?
オンデマンドで、つまり初めて使用する必要があるときに、それを開いてみませんか?その後、DLLがアンロードされたら閉じます。定期的に出力バッファをフラッシュする必要があるかもしれません。 –
あなたは何を意味するのかよく分かりません。私は上記の例を明確にしました。 – Marki
誰もそれを使用したいと思う最初のときに、私はそのファイルを一度だけ開くことを意味する。遅延初期化パターンを使用します。 –