c - 一次 Hook DLL 初始化

标签 c winapi

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

最佳答案

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

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;
    };

}

关于c - 一次 Hook DLL 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220632/

相关文章:

winapi - 允许后台应用设置不同进程的前台窗口

c++ - 在哪里可以找到 NVIDIA 3D Vision 的 API 文档?

winapi - 为什么 Unix 有 fork() 而没有 CreateProcess()?

c++ - winapi - 更改显示器的分辨率不起作用

c++ - DeviceIoControl 对内存位置的访问无效

c - C程序中的字符串文字,可以在二进制中找到吗?

c - 查找数字的 n 位长度 2s 补码表示

c - C中的拉格朗日插值算法在许多步骤后发散

c - 生成文件错误 *** 没有规则可生成 `3' 所需的目标 `run'。停止

c - lwip 堆栈 netconn api 保持连接 "keep-alive"