![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
MuForum |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Доброго времени суток.
На днях появилась задача: Создать .dll, которая будет перехватывать все нажатия клавиатуры в системе. Другими словами глобальный хук. Необходимо было передавать в *.dll имя класса и имя окна, для дальнейшей обработки. Естественно для этих целей должны были быть глобальный переменные, которые смогут использовать всем загруженные программы. Помучившись с сохранением данных, наткнулся на data_seg() - Выделением собственной секции для данных. Наткнувшись на подводные камни, решил описать их. # Общий шаблон:
Начнёмс... Во-первых: Обращаю ваше внимание на тот факт, что в нашей секции будут лишь те переменные, которые изначально будут инициализированы!!! - То есть, переменная fValue будет в контексте каждой программы иметь свои значения! Во-вторых: Так же может встать вопрос, а как создать класс, чтобы он тоже имел одну область памяти в контексте всех программ?
- Надо заметить, что это будет бесполезная трата времени, так как класс будет у всех контекстов иметь разную область памяти. - Необходимо осуществить инициализацию класса, то есть, вызвать конструктор класса(не стандартный), а передав какие-то данные.
- В таком случае всё будет нормально, и мы сможем использовать наш класс в контекстах всех программ. Вот со структурой я так и не разобрался, скорее всего и не получится, так как как структуру инициализировать я себе не представляю. - Собственно я и так рад, что получилось с классом, класс вполне восполнит все мои задачи. P.S. -> Надеюсь кому-то пригодится. - Тему создал собственно по той причине, что заколебался создавать глобальные переменные, получается каша... Это сообщение отредактировал(а) MuForum - 4.11.2010, 11:54 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||||
|
|||||||
BorisVorontsov |
|
||||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Изучать все методом тыка, должно быть, очень занимательно, но ведь все описано в MSDN
Структура в C++ ничем не отличается от класса, за исключением области видимости по-умолчанию для членов -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Кстати, вам сильно повезло, что класс с конструктором лег в инициализированную секцию. Может и не лечь (даже если просто поменять уровень оптимизаций).
Структуру (точнее POD структуру), кстати, точно можно разместить таким образом:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |