Windows DLL全局变量

时间:2011-12-09 10:01:03

标签: windows dll global-variables

加载到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(...)
    ...
}

我在这里缺少什么?线程怎么样?

1 个答案:

答案 0 :(得分:0)

Windows DLL中的每个全局变量对于加载DLL的每个进程都有一个实例。进程和全局变量实例之间存在一对一映射。进程彼此完全隔离,一个进程无法直接访问不同进程中的内存。

如果要在进程之间共享变量,则需要某种形式的进程间通信(IPC)。例如,您可以设置DLL可以向其发送消息的日志记录应用程序。