|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.10.2010, 13:25 | #1 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
Вопрос про dll и сообщения
Добрый день.
Я написал функцию и поместил ее в dll. Эта dll должна загружаться из основной программы.Во время работы функция отправляет сообщения программе, номера сообщений следующие : 8 - начало работы функции(посылается 1 раз), 9 - работа функции(посылается много раз), 10 - работа функции окончена(посылается 1 раз). Для отправки сообщения из dll я использовал функцию PostMessage,основная программа принимает их с помощью функции GetMessage. Второй параметр функции GetMessage - HWND окна,сообщения которого нужно обрабатывать,если этот параметр NULL то будут обрабатываться сообщения всех окон. Третий и четвертый параметры функции указывают минимальное и максимальное значение принимаемого сообщения. Я бы хотел сделать чтобы основная программа принимала сообщения с номерами 8 ,9 , 10 только от функции из моей dll, но для этого нужно HWND, а его у dll на сколько я знаю нет,если я не прав поправьте меня. Вопрос в следующем: Как сделать чтобы основная программа принимала сообщения с номерами 8 ,9 , 10 только от моей dll? Код:
Последний раз редактировалось HollyPaladin; 19.10.2010 в 15:38. |
19.10.2010, 19:55 | #2 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
изобретать велосипед не нужно - есть же стандартный цикл опроса входящих сообщений
dll должна узнать хендл окна - способов это сделать гораздо больше одного и передавать сообщение непосредственно ему, а не окно принимать сообщения и думать длл его отправило или нет
Нет, ну правда..
Последний раз редактировалось yuran666666; 19.10.2010 в 19:59. |
20.10.2010, 14:57 | #3 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
yuran666666,функция из dll знает хэндл окна основной программы и посылает сообщения именно ему, но если не проверять в основной программе откуда пришло сообщение то может например произорйти такая ситуация: функция из dll еще не закончила работу и посылает основной программе сообщения с номером 9, а в этот момент основная программа примет сообщение с номером 10 (работа функции окончена) не от моей dll , в результате программа подумает что функция из dll окончила работу а это не так.
|
20.10.2010, 15:06 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а оно кому то надо вашему окну посылать левые сообщения?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
20.10.2010, 15:55 | #5 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
Пепел Феникса, этого я не знаю, я написал только dll , основная программа написана не мной, знаю что таких dll как моя основная программа использует множество и какие сообщения она посылает и принимает и когда я не знаю, знаю только что моя отправляет сообщения с тремя разными номерами а основная программа принимает их, по этому и хотел подстраховаться чтобы сообщения наверняка принимались от моей dll.
|
20.10.2010, 16:03 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
так если основная программа написана не вами то зачем вообще в нее лезть?
вообще поидее у сообщения два параметра один надо делать как идентификатор ДЛЛ тогда. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
20.10.2010, 16:50 | #7 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
Пепел Феникса, полез потомучто у меня небольшой опыт работы с сообщениями и не хотелось бы чтобы из-за неправильной передачи сообщений потом возникли проблемы в работе программы и пришлось бы что-нибудь переделывать.
Спасибо за исчерпывающий ответ. |
21.10.2010, 11:12 | #8 | |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Цитата:
A handle to the window whose messages are to be retrieved. The window must belong to the current thread. так что не думайте, что стандартная процедура обработки сообщений окну: Код:
DispatchMessage передаст это ваше сообщение присланное окну в процедуру обработки сообщений (она определяется при создании окна). Сообщения с номерами 8 ,9 ,10(скорее всего прописываются в параметре WPARAM или LPARAM структуры MSG) если они обрабатываются приложением, будут обрабатываться этой процедурой независимо от того откуда они пришли от вашей длл, от чужой или вообще от квыпа с файрфоксом Если хотите более исчерпывающий ответ, то нужно хотябы показать что это за приложение (если конечно оно не сотни мб весит)
Нет, ну правда..
|
|
21.10.2010, 11:30 | #9 |
Пользователь
Регистрация: 29.11.2009
Сообщений: 51
|
yuran666666,я уже разобрался.
Спасибо всем кто отписался в теме. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос про классы в DLL. | Вадим Буренков | Общие вопросы Delphi | 15 | 14.09.2009 18:36 |
Вопрос про DLL | R@# | Общие вопросы Delphi | 11 | 21.06.2009 12:26 |
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) | Albert2008 | Общие вопросы Delphi | 4 | 21.08.2008 15:33 |
Передача сообщения из программы в свою Dll | SergeySK | Общие вопросы Delphi | 3 | 01.11.2007 14:42 |
Вопрос про DLL-файлы | PChEL@ | Общие вопросы Delphi | 3 | 29.06.2007 02:03 |