一次Hook DLL初始化

时间:2010-07-10 19:54:15

标签: c winapi

我的程序使用SetWindowsHookEx在我的DLL中设置全局钩子函数。但是我希望DLL能够处理文件,所以我需要一个文件才能打开一次。我不能使用DllMain的DLL_PROCESS_ATTACH,因为它被多次调用。什么是我的问题的最佳解决方案?

1 个答案:

答案 0 :(得分:2)

使用静态标志来判断您是否已经初始化。

void DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    static BOOL initialized = FALSE;

    switch(dwReason) {
        case DLL_PROCESS_ATTACH:
            if(!initialized) {
                // Perform initialization here...ex: open your file.
                initialized = TRUE;
            }
            break;
        case DLL_PROCESS_DETACH:
            if(initialized) {
                // Perform cleanup here...ex: close your file.
                initialized = FALSE;
            }
            break;
    };

}