Однократная инициализация DLL Hook - PullRequest
2 голосов
/ 10 июля 2010

Моя программа использует SetWindowsHookEx, чтобы установить глобальную функцию подключения в моей DLL. Однако я хочу, чтобы DLL работала с файлом, поэтому мне нужно, чтобы файл открывался один раз. Я не могу использовать DLL_PROCESS_ATTACH DllMain, потому что он вызывается несколько раз. Как лучше всего решить мою проблему?

1 Ответ

2 голосов
/ 29 июля 2010

Используйте статический флаг, чтобы узнать, инициализированы ли вы уже или нет.

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...