![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каким образом лучшее всего передать инфо из проги в прогу? [D6, WinXP]
oduvan © (2002-08-13 16:12:00)Каким образом лучшее всего передать инфо из проги в прогу?
Если Messaga"ми, то как передать текстовую строку (string или PCHAR), я так понял, что нужно зоздавать свой Тип Мессаджа там WM_USER+NNN. Поможите мастаки!
Garrison (2002-08-15 17:47:00) [1]А Memory Mapped Files не пробовали?
cdaDmitriy (2002-08-14 14:26:00) [2]>>wal © (14.08.02 14:22)
>A еще можно использовать DDE
OLE ,COM, DCOM, ActiveX и так далее ....
wal (2002-08-14 14:22:00) [3]А еще можно использовать DDE
Игорь Шевченко (2002-08-13 18:47:00) [4]cdaDmitriy © (13.08.02 18:42)
Дальше - Program Files/Borland/Delphi/Demos/IPCDemos/*.*
cdaDmitriy (2002-08-13 18:42:00) [5]Это понятно ну а дальше
Игорь Шевченко (2002-08-13 18:41:00) [6]cdaDmitriy © (13.08.02 18:36)
MMF - Memory mapped files
cdaDmitriy (2002-08-13 18:36:00) [7]Игорь Шевченко © (13.08.02 16:31)
Через MMF, к примеру
Что имеешь в виду расшифруй
Игорь Шевченко (2002-08-13 18:13:00) [8]Alx2 © (13.08.02 18:05)
Сдохло при передаче или при приеме ? (я, кстати, в аську стукнул)
Alx2 (2002-08-13 18:05:00) [9]Попробовал еще раз :)
Все сдохло моментально ...
Игорь Шевченко (2002-08-13 17:49:00) [10]Alx2 © (13.08.02 17:44)
Насколько я понял и надо передавать именно PChar из которого на приемной строне String делается.
Я не признаю такого рода заморочки с AnsiString, уж больно чреваты они подводными камнями.
Alx2 (2002-08-13 17:48:00) [11]>Игорь Шевченко © (13.08.02 17:39)
Извини, невнимательно посмотрел. По-моему так тоже пробовал. Траблы оставались.
Alx2 (2002-08-13 17:44:00) [12]>cdaDmitriy © (13.08.02 17:40)
Да. И даже больше
>Игорь Шевченко © (13.08.02 17:39)
Ну в этом случае чистый pchar просто передаем.
А затык был именно на разнице между
Str := CBTCreateWnd^.lpCs^.lpszClass;
и
SetLength(Str,255);
GetClassName(wParam,PChar(Str),255); // Класс окна получаем заново, не используя переданное
Str := PChar(Str);
cdaDmitriy (2002-08-13 17:40:00) [13]Alx2 © Так это 2 процесса ???
Игорь Шевченко (2002-08-13 17:39:00) [14]А так:
MyWindow := FindWindow("TWatcherForm", "WatcherForm");
with DataStruct do begin
dwData := wParam;
cbData := StrLen(CBTCreateWnd^.lpCs^.lpszClass)+1;
lpData := CBTCreateWnd^.lpCs^.lpszClass;
end;
SendMessage(MyWindow, WM_CopyData, 8101973, Integer(@DataStruct));
А на приемной стороне как сейчас...
Alx2 (2002-08-13 17:36:00) [15]Забыл про обратную сторону:
Procedure TWatcherForm.onCopyData(Var Msg: TMessage);
Var
wProcessID: DWORD;
S: String;
ID: Integer;
Begin
<что-то обрабатываем и инициализируем>
Memo1.Lines.Add(DateTimeToStr(Now) + "> " + GetExeName(wProcessID) + " (" +
IntToStr(wProcessID) + "): " +
String(PCopyDataStruct(Msg.LPARAM)^.lpData)); // используем переданный string
End;
End;
Alx2 (2002-08-13 17:33:00) [16]>Игорь Шевченко © (13.08.02 17:24)
4 байта - потому-что строка.
А заморочки такие давно канули в лету. Просто сам факт остался непонятым. То что это можно обойти - само собой. Но тут уже дело в принципе.
Игорь Шевченко (2002-08-13 17:24:00) [17]Зачем такие заморочки со строками ?
И зачем +4 у cbData ?
И что на приемной стороне ?
Alx2 (2002-08-13 17:17:00) [18]Нет.
Игорь Шевченко (2002-08-13 17:15:00) [19]ShellProc и MyWindow в одном процессе ?
Alx2 (2002-08-13 17:03:00) [20]>Игорь Шевченко © (13.08.02 16:59)
А конкретнее?