Re: не видны глобальные переменные
От: Mr.Delphist  
Дата: 14.02.13 11:44
Оценка:
Здравствуйте, loggik, Вы писали:

L>в SetHook запомнился hwnd, но в HookProc он равен 0.


Классическая ситтуация с хуками: надо помнить, что
1) DLL не имеет собственного адресного пространства
2) экземпляров DLL может быть несколько (даже если hInstance совпадает)

Т.е. получается, что первый инстанс DLL запомнил hwnd, но эта переменная хранится в памяти процесса P1. Затем стреляет HookProc, но это происходит к контексте процесса P2 (у которого тоже есть аналогичная переменная, но там пока нуль или мусор).
Чтобы такого избежать, обычно делают inter-process communication (обычно через shared memory). И, если не изменяет память, можно ещё при сборке флаги специальные задать, тогда будет та же shared memory, но прозрачно для программиста (секция данных будет загружена в специально созданную для этого shared memory или как-то так) — но лично никогда на это не заморачивался, дабы не усложнять сборку.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.