加载到Windows应用程序中的DLL由入口点(DLLMain())和可以从那里调用的其他函数组成。现在,如何在每个附加到此DLL的进程和线程的所有函数中创建变量全局?
目前,我需要在每次调用其中一个函数时打开/关闭文件。由于这些函数经常被调用,因此每次打开/关闭文件都是一个真正的性能问题。
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(...)
...
}
我在这里缺少什么?线程怎么样?
答案 0 :(得分:0)
Windows DLL中的每个全局变量对于加载DLL的每个进程都有一个实例。进程和全局变量实例之间存在一对一映射。进程彼此完全隔离,一个进程无法直接访问不同进程中的内存。
如果要在进程之间共享变量,则需要某种形式的进程间通信(IPC)。例如,您可以设置DLL可以向其发送消息的日志记录应用程序。