Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передать строку как параметр сообщения виндовс / 14 сообщений из 14, страница 1 из 1
13.01.2005, 13:49
    #32863168
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Приложение отправитель:
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
...
Рейтинг: 0 / 0
13.01.2005, 14:08
    #32863240
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
У двух приложений совершенно разные пространства памяти, недоступные друг другу, потому указатель из первого приложения неимеет никакого смысла во втором, так как данные находятся в контексте первого приложения.
Для обмена данными необходимо использовать различные методики межпроцессного взаимодействия типа разделяемой памяти, лично я предпочитаю использовать именованные каналы, так проще
____________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
13.01.2005, 15:55
    #32863531
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Что никак низзя передать строку как параметр для сообщения?
Каналы - это слишком сложно
C ув. Tors
...
Рейтинг: 0 / 0
13.01.2005, 16:29
    #32863643
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Кстати , не можешь объяснить смысл объявления структуры
I_FbdllIntrf c виртуальным методом как extern "C" ?
...
Рейтинг: 0 / 0
13.01.2005, 17:29
    #32863796
zest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Посмотри в сторону WM_COPYDATA
...
Рейтинг: 0 / 0
13.01.2005, 18:16
    #32863923
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
MasterZivКстати , не можешь объяснить смысл объявления структуры
I_FbdllIntrf c виртуальным методом как extern "C" ?
Хи-Хи
...
Рейтинг: 0 / 0
13.01.2005, 18:23
    #32863942
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Посмотри в сторону WM_COPYDATA



An application must use the SendMessage function to send this message, not the PostMessage function.

Мне нужно передавать сообщение между 2мя разными приложениями



C ув. Tors
...
Рейтинг: 0 / 0
13.01.2005, 20:42
    #32864094
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
tors
Посмотри в сторону WM_COPYDATA

An application must use the SendMessage function to send this message, not the PostMessage function.

Мне нужно передавать сообщение между 2мя разными приложениями

C ув. Tors

Ну и что: SendMessage работает и с двумя разными приложениями, но так как она синхронна, то работа одного приложения притормозится на время возврата из обработчика в другом приложении. IMHO для небольших объемов данных не в реальном времени это некритично
...
Рейтинг: 0 / 0
14.01.2005, 11:58
    #32864726
hell
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Можно использовать Memory Mapped File и передавать указатель на позицию

MMF

"Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия
...
Рейтинг: 0 / 0
14.01.2005, 12:03
    #32864737
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Приложение отправитель:
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
...
Рейтинг: 0 / 0
14.01.2005, 13:05
    #32864911
tors
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
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
...
Рейтинг: 0 / 0
14.01.2005, 15:56
    #32865470
Lelikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Попоробуй перехватить сообщение в форме добавив в карту сообщений обработчик типа
BEGIN_MESSAGE_MAP
...
VCL_MESSAGE_HANDLER....
....
END_MESSAGE_MAP
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
14.01.2005, 18:38
    #32865804
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
Если не работает SendMEssage (виснет посылающее приложение), используй SendMessageTimeout. Правда все равно принемающее приложение должно ожидать и обрабатывать сообщения.
...
Рейтинг: 0 / 0
14.01.2005, 18:42
    #32865810
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передать строку как параметр сообщения виндовс
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(...) ) - что оно необработано.
Вообще то, что сообщение возвращает, зависит от сообщения и функции окна - она может вернуть все что угодно.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передать строку как параметр сообщения виндовс / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]