![]() |
![]() |
![]() |
|
OFF: Delphi, передача строки между приложениями | ☑ | ||
---|---|---|---|---|
0
vde69
03.09.09
✎
15:29
|
отправляю:
--------------------------------------------------- var MemHnd : HWND; AText: PChar; begin .... .... .... AText := 'Vasi'; SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Length(AText) * SizeOf(Char), LParam(@AText)); sleep(500); .... .... ---------------------------------------------- принимаю: ----------------------------------------------- procedure TSDIAppForm.DefaultHandler(var Message); var FilenameForOpening: string; s: string; begin with TMessage(Message) do begin if (Msg = WM_OURMESSAGE) then begin SetLength(FilenameForOpening, WParam div SizeOf(Char)); p := Ptr(LParam); Move(PChar(p^), PChar(FilenameForOpening)^, WParam); s := FilenameForOpening; // вот тут "#0#0#0#0" ????? s := s + ' '; end .... .... .... initialization WM_OURMESSAGE := RegisterWindowMessage('Add_1c+_Server_block'); ------------------------------------------------- туплю уже давно, все примеры из инета перепробовал, нифига не переносит... может дело в типе мессаге? может пользовательские так не работают? |
|||
1
H A D G E H O G s
03.09.09
✎
15:35
|
Ну и как ты обратишься к Чужому адресу???
|
|||
2
H A D G E H O G s
03.09.09
✎
15:35
|
ППЦ
|
|||
3
H A D G E H O G s
03.09.09
✎
15:35
|
Адресация то разная.
|
|||
4
vde69
03.09.09
✎
15:36
|
(1) почитай http://www.delphikingdom.com/asp/answer.asp?IDAnswer=68007
я и сам понимаю проблемму, но не понимаю как у НИХ работает? |
|||
5
H A D G E H O G s
03.09.09
✎
15:36
|
LParam(@AText) - адрес (числом, например $FC01FC01) в 1-ом приложении
p := Ptr(LParam); - адрес (числом, например $FC01FC01) во втором приложении |
|||
6
H A D G E H O G s
03.09.09
✎
15:37
|
У них - WCopyData - спец сообщение Винды.
|
|||
7
H A D G E H O G s
03.09.09
✎
15:38
|
WM_COPYDATA захелпь в Win SDK
|
|||
8
H A D G E H O G s
03.09.09
✎
15:40
|
GlobalAddAtom()
попробуй |
|||
9
H A D G E H O G s
03.09.09
✎
15:43
|
Ты здесь вообще?
Чего ты там такого глобального строгаешь? |
|||
10
vde69
03.09.09
✎
15:44
|
(9) строгаю сервер административного запрета запуска 1с
|
|||
11
v77
03.09.09
✎
15:44
|
(4) ну дак ты делай как там, а не как сам придумал :)))
намёк CDS:TCopyDataStruct |
|||
12
H A D G E H O G s
03.09.09
✎
15:46
|
(10) Да вы программист (типа - ответ есть, он верен, но абсолютно не понятен). :-)
|
|||
13
Salvador Limones
03.09.09
✎
15:48
|
(10) Хммм... А расскажи принцип действия!
|
|||
14
v77
03.09.09
✎
15:50
|
(13) здесь всё написано
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=68007 |
|||
15
vde69
03.09.09
✎
15:50
|
(13) я только для своего собственого стартАпа, сервер будет создавать определенный файл в каталоге с базой и держать на нем блокировку, а стартап не будет давать запустить если такая ситуевина
|
|||
16
v77
03.09.09
✎
15:50
|
просто он вместо адреса структуры передает адрес строки
|
|||
17
Salvador Limones
03.09.09
✎
15:52
|
(15) О, ясно! А контроль за запуском через хук?
|
|||
18
vde69
03.09.09
✎
15:55
|
(17) вот к этому http://www.infostart.ru/projects/2836/ приделываю
|
|||
19
MMF
03.09.09
✎
16:02
|
обычно для межпроцессового обмена используют отображение файла в память
|
|||
20
H A D G E H O G s
03.09.09
✎
16:05
|
(19) Ага.
А еще можно UDP/TCP заюзать. Нафиг этот изврат? MS дала инструмент WM_COPYDATA, так что его не пользовать то? |
|||
21
Капитан Смоллет
03.09.09
✎
16:06
|
(15) Еще одна защита?
|
|||
22
Salvador Limones
03.09.09
✎
16:09
|
(18) А чего там за прикол - "в связи с борьбой за лицензионную чистоту"?
|
|||
23
H A D G E H O G s
03.09.09
✎
16:11
|
(22) В аську!
|
|||
25
vde69
03.09.09
✎
16:14
|
(23)(22) да нету тут секретов, просто есть некоторые споры, что лезть в процессы 1с нельзя (и тот же 1с++ попадает под эти заморочки), то я не юзаю ничего, что можно расценить как декомпеляция, внедрение кода и т.д.
|
|||
28
Torquader
04.09.09
✎
00:13
|
На самом деле можно использовать ClipBoard или просто глобальную память.
hGlobal=GlobalAlloc(GPTR,Размер); Pointer=GlobalLock(hGlobal); CopyMemory(Pointer,НашУказатель,Размер); GlobalUnLock(Pointer); SendMessage(ДругоеПриложение,WM_USER,Размер,(LPARAM)hGlobal); В другом приложении: Pointer=GlobalLock(lParam); CopyMemory(НовоеМесто,Pointer,wParam); GlobalUnLock(Pointer); GlobalFree(lParam); Где-то так. |
|||
29
Андрюха
04.09.09
✎
05:00
|
(0) А я через NamedPipes
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |