|
|
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Приложение отправитель: void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hwnd=FindWindow(NULL,"ПрПолучатель"); if(hwnd==NULL) { ShowMessage("Окно получатель не найдено!!!"); return; } String str=Memo->Lines->Text; void *pv=&str; PostMessage(hwnd,WM_CUSTOM,0,(long)pv); } Приложение получатель: void __fastcall TForm1::ApplicationEventsMessage(tagMSG &Msg, bool &Handled) { unsigned int msg=Msg.message; if(msg==WM_CUSTOM) { void *vp=(void *)Msg.lParam; String *str=(String *)vp; Memo->Lines->Text=*str; } } В строке Memo->Lines->Text=*str; -ошибка Access violation C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 13:49 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
У двух приложений совершенно разные пространства памяти, недоступные друг другу, потому указатель из первого приложения неимеет никакого смысла во втором, так как данные находятся в контексте первого приложения. Для обмена данными необходимо использовать различные методики межпроцессного взаимодействия типа разделяемой памяти, лично я предпочитаю использовать именованные каналы, так проще ____________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 14:08 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Что никак низзя передать строку как параметр для сообщения? Каналы - это слишком сложно C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 15:55 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Кстати , не можешь объяснить смысл объявления структуры I_FbdllIntrf c виртуальным методом как extern "C" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 16:29 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Посмотри в сторону WM_COPYDATA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 17:29 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
MasterZivКстати , не можешь объяснить смысл объявления структуры I_FbdllIntrf c виртуальным методом как extern "C" ? Хи-Хи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 18:16 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Посмотри в сторону WM_COPYDATA An application must use the SendMessage function to send this message, not the PostMessage function. Мне нужно передавать сообщение между 2мя разными приложениями C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 18:23 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
tors Посмотри в сторону WM_COPYDATA An application must use the SendMessage function to send this message, not the PostMessage function. Мне нужно передавать сообщение между 2мя разными приложениями C ув. Tors Ну и что: SendMessage работает и с двумя разными приложениями, но так как она синхронна, то работа одного приложения притормозится на время возврата из обработчика в другом приложении. IMHO для небольших объемов данных не в реальном времени это некритично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 20:42 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Можно использовать Memory Mapped File и передавать указатель на позицию MMF "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 11:58 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Приложение отправитель: void __fastcall TForm1::Button1Click(TObject *Sender) { HWND hwnd=FindWindow(NULL,"ПрПолучатель"); if(hwnd==NULL) { ShowMessage("Окно получатель не найдено!!!"); return; } String str=Memo->Lines->Text; void *pv=&str; PostMessage(hwnd,WM_CUSTOM,0,(long)pv); } Приложение получатель: void __fastcall TForm1::ApplicationEventsMessage(tagMSG &Msg, bool &Handled) { unsigned int msg=Msg.message; if(msg==WM_CUSTOM) { void *vp=(void *)Msg.lParam; String *str=(String *)vp; Memo->Lines->Text=*str; } } Если я посылаю сообщение с помощью PostMessage - приложение получатель получает сообщение А если SendMessage - нифига не работает. Почему? C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 12:03 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
bool flag=SendMessage(hwnd,WM_CUSTOM,0,0); flag==false, и приложение приемник сообщения не принимает bool flag=PostMessage(hwnd,WM_CUSTOM,0,0); flag==true;и приложение приемник сообщения принимает В чем проблема Чтобы отослать WM_COPYDATA нужна SendMessage, а она почемуто не работает C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 13:05 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Попоробуй перехватить сообщение в форме добавив в карту сообщений обработчик типа BEGIN_MESSAGE_MAP ... VCL_MESSAGE_HANDLER.... .... END_MESSAGE_MAP ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:56 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
Если не работает SendMEssage (виснет посылающее приложение), используй SendMessageTimeout. Правда все равно принемающее приложение должно ожидать и обрабатывать сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:38 |
|
||
|
Передать строку как параметр сообщения виндовс
|
|||
|---|---|---|---|
|
#18+
torsbool flag=SendMessage(hwnd,WM_CUSTOM,0,0); flag==false, и приложение приемник сообщения не принимает bool flag=PostMessage(hwnd,WM_CUSTOM,0,0); flag==true;и приложение приемник сообщения принимает В чем проблема Чтобы отослать WM_COPYDATA нужна SendMessage, а она почемуто не работает Кстати, bool( SendMessage(...) ) вовсе не означает, что сообщение обработано. а !bool( SendMessage(...) ) - что оно необработано. Вообще то, что сообщение возвращает, зависит от сообщения и функции окна - она может вернуть все что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32864911&tid=2033850]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 443ms |

| 0 / 0 |
