Хочу создать dll и с ее помощью установить глобальную ловушку на клавиатуру. Но возникает два вопроса:
* как разделять данные между разными екзеплярами dll (которые приаттачены к разным процессам)? у Visual C++ есть директива #pragma data_seg, в Builder такого не нашел
* можно ли в разделяемыд данных создавать объекты (ссылочный тип)?
Спасибо!
26.03.09 12:37: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Там немного другая тема обсуждается (хук в 64-бит приложениях).
Re: global hook in dll
От:
Аноним
Дата:
26.03.09 11:15
Оценка:
C>Хочу создать dll и с ее помощью установить глобальную ловушку на клавиатуру. Но возникает два вопроса: C>* как разделять данные между разными екзеплярами dll (которые приаттачены к разным процессам)? у Visual C++ есть директива #pragma data_seg, в Builder такого не нашел C>* можно ли в разделяемыд данных создавать объекты (ссылочный тип)?
Пихать hook-specific разделяемые данные в шаред секцию длл изначально хреновая идея и от нее надо отказаться. Потому что в винде может быть во первых несколько десктопов, во вторых — несколько сессий. Хук — штука специфичная к десктопе (и понятное дело к сессии). Потому если например на систему зайдет одновременно 2 юзера — 2 разных хука будут поставлены в двух разных сессиях, а общая секция PE файла — у всех будет общая.
Потому лучше пихайте такие данные во view полученный от именованного файлмаппинга
Re[2]: global hook in dll
От:
Аноним
Дата:
26.03.09 11:29
Оценка:
Здравствуйте, Аноним, Вы писали:
C>>Хочу создать dll и с ее помощью установить глобальную ловушку на клавиатуру. Но возникает два вопроса: C>>* как разделять данные между разными екзеплярами dll (которые приаттачены к разным процессам)? у Visual C++ есть директива #pragma data_seg, в Builder такого не нашел C>>* можно ли в разделяемыд данных создавать объекты (ссылочный тип)?
А>Пихать hook-specific разделяемые данные в шаред секцию длл изначально хреновая идея и от нее надо отказаться. Потому что в винде может быть во первых несколько десктопов, во вторых — несколько сессий. Хук — штука специфичная к десктопе (и понятное дело к сессии). Потому если например на систему зайдет одновременно 2 юзера — 2 разных хука будут поставлены в двух разных сессиях, а общая секция PE файла — у всех будет общая.
А>Потому лучше пихайте такие данные во view полученный от именованного файлмаппинга
Спасибо за ответ! Ради интереса: как с этой проблемой справляется Visual C++ с директивой #pragma data_seg? И как можно через файл-маппинг разшаривать классы?
Re[3]: global hook in dll
От:
Аноним
Дата:
26.03.09 11:48
Оценка:
C>>>Хочу создать dll и с ее помощью установить глобальную ловушку на клавиатуру. Но возникает два вопроса: C>>>* как разделять данные между разными екзеплярами dll (которые приаттачены к разным процессам)? у Visual C++ есть директива #pragma data_seg, в Builder такого не нашел C>>>* можно ли в разделяемыд данных создавать объекты (ссылочный тип)? А>>Пихать hook-specific разделяемые данные в шаред секцию длл изначально хреновая идея и от нее надо отказаться. Потому что в винде может быть во первых несколько десктопов, во вторых — несколько сессий. Хук — штука специфичная к десктопе (и понятное дело к сессии). Потому если например на систему зайдет одновременно 2 юзера — 2 разных хука будут поставлены в двух разных сессиях, а общая секция PE файла — у всех будет общая. А>>Потому лучше пихайте такие данные во view полученный от именованного файлмаппинга А>Спасибо за ответ! Ради интереса: как с этой проблемой справляется Visual C++ с директивой #pragma data_seg?
Никак. Ее не надо юзать )
А>И как можно через файл-маппинг разшаривать классы?
Через файлмаппинг мона расшаривать кусок памяти. Классы являются абстракцией уровня языка и потому с файлмаппингом они совершенно перпенидкулярны.