Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача месаги между прилажениями! 
:(
    Опции темы
Hamster
  Дата 25.4.2003, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 17.4.2003

Репутация: нет
Всего: нет



Передача месаги между прилажениями!


Привет всем!
есть проблема с передачей стринга от одного прилажения другому!
Я делаю это с помощью винапи sendmessage регестрирую свою месагу и всё в таком ключе.
Но возникла всего одна проблема! При получении месаги на противоположной стороне компилятор начинает жудко ругаться и выкидывает меня!

SendMessage(hWnd,WM_MYMESSAGE,0,Integer(PChar(s)));


-------------------------------
inherited;
if Msg.Msg = WM_MYMESSAGE then memo1.text:=string(msg.LParam);

Короче я не знаю как передать строку!
Кто может помочь?
Зарание спасибо!

ЗЫ А как разослать месагу ВСЕМ окнам в системе?
PM MAIL   Вверх
Fedor
Дата 25.4.2003, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Ну, посылаешь ты вроде-бы правильно. Вот только прием не очень... smile
Рассмотрим Unit, в котором прописан прием:
Код

Unit ...
Interface
TForm1=class(TForm)
...
privat
  procedure GetMyMessage(var a:Tmessage); message WM_Mymessage
...
implementation
...
procedure TForm1.GetMyMessage(var a:Tmessage);
begin
  label1.caption:='Я получил сообщение: '+Inttostr(lparam)
end;
...
...
end.


Это сообщение отредактировал(а) p0s0l - 29.9.2005, 12:31


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
man2002ua
Дата 25.4.2003, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Цитата
компилятор начинает жудко ругаться и выкидывает меня!

Компилятор или программа?

А знаете ли вы:
Что два процесса не могут читать данные друг друга, т.к. они находяться в различных адресных пространствах?

Т.е. когда один пишет "я передаю тебе указатель на свою переменную по адресу 0х1111", то другой получив это сообщение (в твоем варианте) пытается читать этот адрес, но в своем пространстве, где ее никто не объявлял - отсюда access violation.

Одно из решений - передавать сообщение так:
Код
SendMessage(hWnd,WM_MYMESSAGE,GetCurrentProcessId(),Integer(PChar(s)));

-------- а принимать так --------
Код
var lpData: PChar;
      pH: THANDLE;
begin
lpData := AllocMem(STRING_LEN + 1);
inherited;
if Msg.Msg = WM_MYMESSAGE then 
begin
  pH := OpenProcess(PROCESS_VM_READ, FALSE, msg.WParam);
  ReadProcessMemory(pH, lpData, msg.LParam, STRING_LEN);
  memo1.text:=string(lpData); 
end;


Это сообщение отредактировал(а) p0s0l - 29.9.2005, 12:31


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
<Spawn>
Дата 25.4.2003, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Еще для передачи данных из одного процесса в другой существует месага WM_COPYDATA (вроде так smile.gif )


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Hamster
Дата 25.4.2003, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 17.4.2003

Репутация: нет
Всего: нет



To_Morpheus: Это немного не то!
To_man2002ua:

1) Я не понял что за переменная STRING_LEN, кокого она типа!
2) ReadProcessMemory - включает в себя 5 параметров, а у тебя всего 4 sad.gif
PM MAIL   Вверх
man2002ua
Дата 25.4.2003, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



<Spawn>, твой ответ лучше!

Hamster, смотри то, что сказал Spawn - не забивай голову smile.gif, то что я предложил - делает WM_COPYDATA


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Hamster
Дата 25.4.2003, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 17.4.2003

Репутация: нет
Всего: нет



Тогда как сделать мой вариант?
PM MAIL   Вверх
Hamster
Дата 25.4.2003, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 17.4.2003

Репутация: нет
Всего: нет



Ладно! Я сделал через атомы! Хотя предыдущий вопрос в силе!
PM MAIL   Вверх
man2002ua
Дата 25.4.2003, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



делаешь SendMessage(hwnd, WM_COPYDATA,<your window handle>,COPYDATASTRUCT)
----
при приеме этого сообщения - рассматривай LParam, как указатель на COPYDATASTRUCT, в которой - есть указатели на передаваемые данные.
Еще посмотри файл справки на тему WM_COPYDATA


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.