Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача данных из одной программы в другую через указатели


IceBeerg ©   (2006-07-19 13:48:00) 

Есть две программы, первая запущена. Вторая при запуске опрделяет наличие первой, проделывает некотрую работу и пытается передать данные посредством сообщений windows. Так вот первая программа сообщение получает, адрес указателя получает, но данных по этому адресу нет...

Отсылаю данные:
...
 wnd:=FindWindow('TTestOpenForm','TestOpenForm');
 If wnd<>0 Then
  Begin
   WParam:=Pointer(GlobalAlloc(GPTR,SizeOf(DataBuf)));//DataBuf:String
   WParam^:=DataBuf;//WParam:^String
   PostMessage(wnd,wm_Data,Integer(@WParam),0);//const wm_Data=wm_User+256
   Halt;
  End;
...


Пытаюсь получить данные (в перекрытом onMessage):
...
If Msg.message=wm_Data Then
Begin
 PWParm:=Ptr(Msg.wParam);//PWParm:^String
 Data:=PWParm^;//Data:String <- ПУСТО!!!
 ...
End;
...


как все таки передать из программы в программу строку?


Ketmar   (2006-07-19 16:45:00) [1]

>IceBeerg ©   (19.07.06 15:10) [10]
быстро забыть обо всём остальном и искать баг в своём коде.


Amoeba   (2006-07-19 16:31:00) [2]

К сожалению, почта не прошла.

<icebeerg@newmail.ru> (mail.newmail.ru: 553 84.204.46.4 temporary blacklisted, contact noc@pochta.ru (84.204.46.4))


Amoeba   (2006-07-19 16:29:00) [3]

Выслал готовую демку. Может пригодится.


IceBeerg   (2006-07-19 15:10:00) [4]


> З.Ы. Если SendMessage не работает то и PostMessage не будет
> работать.

А вот так вот получается... сначала и пробовал через SendMessage, никак, а птом заменил на PostMessage и за работало! Тогда как раз проверял факт получения первым приложением сообщения от втрого.

2 Юрий Зотов
Спсибо.

И вообще, всем спасибо, буду рыться дальше.


medved_68   (2006-07-19 14:42:00) [5]


> Юрий Зотов

Спасибо


Юрий Зотов   (2006-07-19 14:21:00) [6]

Чтобы не повторять уже обсуждавшееся:
http://delphimaster.ru/cgi-bin/forum.pl?id=1152681599&n=0


medved_68   (2006-07-19 14:18:00) [7]


> 2Юрий Зотов

А с Pipe каналом можно провернуть сие???


Юрий Зотов   (2006-07-19 14:15:00) [8]

> IceBeerg ©   (19.07.06 13:58) [3]

См. CreateFileMapping. Но с WM_COPYDATA получится проще.

> IceBeerg ©   (19.07.06 14:02) [4]
> Первая программа через SendMessage сообщения НЕ получает

Почему? Должна получать. WM_COPYDATA для того и существует. Оно же работает? Работает.


medved_68   (2006-07-19 14:12:00) [9]


> А чем тогда разместить данные в общей куче?

Боюсь что сие невозможно.

> Первая программа через SendMessage сообщения НЕ получает

Почему??? Если правильно найден дискриптор окна сообщение ДОЛЖНО ПРИЙТИ. Ищи ошибку в перекрытии WndProg окна кому посылаешь сообщение.
З.Ы. Если SendMessage не работает то и PostMessage не будет работать.


IceBeerg   (2006-07-19 14:02:00) [10]

Первая программа через SendMessageсообщения НЕ получает :( и спользую PostMessage, а WM_COPYDATAc PostMessageне работает :(
An application must use the SendMessage function to send this message, not the PostMessage function.


IceBeerg   (2006-07-19 13:58:00) [11]


> Ega23 ©   (19.07.06 13:51) [2]

А чем тогда разместить данные в общей куче? И потом их заиспользовать и убрать?


Virgo_Style   (2006-07-19 13:51:00) [12]

Если через сообщения - SendMessage WM_CopyData ?


Ega23   (2006-07-19 13:51:00) [13]

Ха! Адресные пространства у процессов-то разные...


Наверх

Титульная страница Поиск, карта сайта Написать письмо