hInst для каждой копии хуковой длл-ны должен быть свой, а ты переменную в шаред-сегмент запихал.
Просто объяви её вне этого сегмента как обычную глобальную переменную...
Мне нужно считывать через хук клавиатуру!
Я сделал следующее: создал библиотеку на основе Win32 static library:
.cpp:
#pragma data_seg(".shared")
HINSTANCE hInst = 0;
HHOOK hHook = 0;
HWND TargetWnd = 0;
#pragma data_seg()
#pragma comment(linker, "/section:.shared,rws")
Подключил .lib и .h файлы к своей проге и в самой проге уже вызываю:
InstallHook(m_hWnd);
UninstallHook();
Проблема заключается в том, что под 98-й виндой все работает, а под ХР не хочет (функция SetWindowsHookEx возвращает NULL).
Заранее спасибо за помощь!
I>Проблема заключается в том, что под 98-й виндой все работает, а под ХР не хочет (функция SetWindowsHookEx возвращает NULL). I>Заранее спасибо за помощь!
I>>.cpp: I>> #pragma data_seg(".shared") I>> HINSTANCE hInst = 0; << здесь ошибка I>> HHOOK hHook = 0; I>> HWND TargetWnd = 0; I>> #pragma data_seg() I>> #pragma comment(linker, "/section:.shared,rws")
S>hInst для каждой копии хуковой длл-ны должен быть свой, а ты переменную в шаред-сегмент запихал. S>Просто объяви её вне этого сегмента как обычную глобальную переменную...
Но как в данном случае это влияет на SetWindowsHookEx? Тут явно что то еще..
Здравствуйте, Andrew S, Вы писали:
AS>Но как в данном случае это влияет на SetWindowsHookEx? Тут явно что то еще..
Проверил еще раз GetLastError — выдало следующее:
"Невозможно установить нелокальный обработчик без дескриптора модуля."
(хотя раньше как мне казалось писало что все нормально)
Кстати выдает эту ошибку и в случае если объявляю HINSTANCE hInst вне сегмента как обычную глобальную переменную!
AS>>Но как в данном случае это влияет на SetWindowsHookEx? Тут явно что то еще..
I>Проверил еще раз GetLastError — выдало следующее: I>"Невозможно установить нелокальный обработчик без дескриптора модуля." I>(хотя раньше как мне казалось писало что все нормально) I>Кстати выдает эту ошибку и в случае если объявляю HINSTANCE hInst вне сегмента как обычную глобальную переменную!
Гм, а что означает эта фраза? I>Я сделал следующее: создал библиотеку на основе Win32 static library
Милейший, уж не сделали ли Вы просто статическую библиотеку вместо динамической? Если так, то на кой раз должна, собственно, вызываться dllmain и, уж тем более, хоть как-то инициализироваться hInst? Статическая библиотека это просто хранилище кода (и данных), но никак не отдельный PE модуль.