DLL проецируется на адресное пространство запустившего процесса, так что поток запущеный внутри DLL ничем не отличается от потока запущеного внутри исполняемого файла.
Re: Как из треда который запущен в dll передать message в ок
Здравствуйте, foteam, Вы писали:
F>Здравствуйте, Voit, Вы писали:
V>>САБЖ V>>Ну и не помешало бы ещё и принять его окошком. V>>Заранее благодарен...
F>как обычно SendMessage() или PostMessage()
А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).
Re[3]: Как из треда который запущен в dll передать message в
Здравствуйте, Voit, Вы писали:
V>Здравствуйте, foteam, Вы писали:
F>>Здравствуйте, Voit, Вы писали:
V>>>САБЖ V>>>Ну и не помешало бы ещё и принять его окошком. V>>>Заранее благодарен...
F>>как обычно SendMessage() или PostMessage() V>А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).
Ну так адресное пространство то у вас одно. Если используешь SendMessage, то просто передаешь адрес этого буфера (он может быть размещен на стеке, поскольку SendMessage работает синхронно). Если PostMessage — за выделение памяти под буфер отвечает твой поток, за освобождение — обработчик сообщения (т.е. другой поток).
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[4]: Как из треда который запущен в dll передать message в
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, Voit, Вы писали:
V>>Здравствуйте, foteam, Вы писали:
F>>>Здравствуйте, Voit, Вы писали:
V>>>>САБЖ V>>>>Ну и не помешало бы ещё и принять его окошком. V>>>>Заранее благодарен...
F>>>как обычно SendMessage() или PostMessage() V>>А если мне надо передать строку, которая сформироваласьв том потоке а не системный меседж, то как поступать??(Допустим я в том треде считал из файлика данные).
E>Ну так адресное пространство то у вас одно. Если используешь SendMessage, то просто передаешь адрес этого буфера (он может быть размещен на стеке, поскольку SendMessage работает синхронно). Если PostMessage — за выделение памяти под буфер отвечает твой поток, за освобождение — обработчик сообщения (т.е. другой поток).
А событие отлавливать OnSysCommand? В основном приложении?
Re[5]: Как из треда который запущен в dll передать message в
Здравствуйте, Voit, Вы писали:
V>А событие отлавливать OnSysCommand? В основном приложении?
В каком еще OnSysCommand? Событие надо отлавливать в оконной процедуре того окна, которому ты посылаешь это сообщение. Для этого нужно будет определить свой тип сообщения:
#define WM_MYMESSAGE WM_USER + 1
Далее:
— если пишешь на голом WinAPI — добавляешь обработку для этого сообщения в оконную процедуру
— если используешь MFC или WTL — добавляешь обработчик этого сообщения в карту сообщений того класса, который связан с данным окном (например визардом)
— вызываешь SendMessage/PostMessage указывая созданный твой идентификатор сообщения
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[6]: Как из треда который запущен в dll передать message в
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, Voit, Вы писали:
V>>А событие отлавливать OnSysCommand? В основном приложении?
E>В каком еще OnSysCommand? Событие надо отлавливать в оконной процедуре того окна, которому ты посылаешь это сообщение. Для этого нужно будет определить свой тип сообщения:
E>
E>#define WM_MYMESSAGE WM_USER + 1
E>
E>Далее: E>- если пишешь на голом WinAPI — добавляешь обработку для этого сообщения в оконную процедуру E>- если используешь MFC или WTL — добавляешь обработчик этого сообщения в карту сообщений того класса, который связан с данным окном (например визардом)
E>- вызываешь SendMessage/PostMessage указывая созданный твой идентификатор сообщения
Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
Re[7]: Как из треда который запущен в dll передать message в
Здравствуйте, Voit, Вы писали:
V>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает
Re[8]: Как из треда который запущен в dll передать message в
Здравствуйте, odisseyLM, Вы писали:
LM>Здравствуйте, Voit, Вы писали:
V>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
LM>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает
Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??
Re[9]: Как из треда который запущен в dll передать message в
Здравствуйте, Voit, Вы писали:
V>Здравствуйте, odisseyLM, Вы писали:
LM>>Здравствуйте, Voit, Вы писали:
V>>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
LM>>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает
V>Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??
Re[9]: Как из треда который запущен в dll передать message в
Здравствуйте, Voit, Вы писали:
V>Здравствуйте, odisseyLM, Вы писали:
LM>>Здравствуйте, Voit, Вы писали:
V>>>Сделал, но getmessage не получает моего сообщения. Хендл и у sendmessage и у getmessage один. но не пашет почему то приходит всякая лабуда а то что надо не приходит... Раз у меня одно адресное пространство, может мне просто сделать один буфер обмена на этапе подключения библиотеки и по нему проверять сообщения??
LM>>Я конечно извиняюсь за грубость, но ты бы в начале почитал бы что-ли какую-нибудь базовую литературу, например Петзольда, Рихтера (там узнаешь что GetMessage выбирает асинхронные сообщения (из очереди), а SendMessage посылает синхронные сообщения, миную очередь — пряио в твою WindowProc) — тяжело говорить с человеком, если он вообще ничего не знает
V>Вроде разобрался, посылаю message функцией PostMessage, но оно доходит со второго или третьего раза. Из-за чего бы это могло быть??