OFF: Delphi, передача строки между приложениями #429624


#0 by vde69
отправляю: --------------------------------------------------- var  MemHnd : HWND;  AText: PChar; begin .... .... ....        AText := 'Vasi';        SendMessage(HWND_BROADCAST, WM_OURMESSAGE, Length(AText) * SizeOf(Char), LParam(@AText));        sleep; .... .... ---------------------------------------------- принимаю: ----------------------------------------------- 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 by H A D G E H O G s
Ну и как ты обратишься к Чужому адресу???
#2 by H A D G E H O G s
ППЦ
#3 by H A D G E H O G s
Адресация то разная.
#4 by vde69
почитай я и сам понимаю проблемму, но не понимаю как у НИХ работает?
#5 by H A D G E H O G s
LParam(@AText) - адрес (числом, например $FC01FC01) в 1-ом приложении p := Ptr(LParam);  - адрес (числом, например $FC01FC01) во втором приложении
#6 by H A D G E H O G s
У них - WCopyData - спец сообщение Винды.
#7 by H A D G E H O G s
WM_COPYDATA захелпь в Win SDK
#8 by H A D G E H O G s
GlobalAddAtom попробуй
#9 by H A D G E H O G s
Ты здесь вообще? Чего ты там такого глобального строгаешь?
#10 by vde69
строгаю сервер административного запрета запуска 1с
#11 by v77
ну дак ты делай как там, а не как сам придумал :))) намёк CDS:TCopyDataStruct
#12 by H A D G E H O G s
Да вы программист (типа - ответ есть, он верен, но абсолютно не понятен). :-)
#13 by Salvador Limones
Хммм... А расскажи принцип действия!
#14 by v77
здесь всё написано
#15 by vde69
я только для своего собственого стартАпа, сервер будет создавать определенный файл в каталоге с базой и держать на нем блокировку, а стартап не будет давать запустить если такая ситуевина
#16 by v77
просто он вместо адреса структуры передает адрес строки
#17 by Salvador Limones
О, ясно! А контроль за запуском через хук?
#18 by vde69
вот к этому приделываю
#19 by MMF
обычно для межпроцессового обмена используют отображение файла в память
#20 by H A D G E H O G s
Ага. А еще можно UDP/TCP заюзать. Нафиг этот изврат? MS дала инструмент WM_COPYDATA, так что его не пользовать то?
#21 by Капитан Смоллет
Еще одна защита?
#22 by Salvador Limones
А чего там за прикол - "в связи с борьбой за лицензионную чистоту"?
#23 by H A D G E H O G s
В аську!
#25 by vde69
да нету тут секретов, просто есть некоторые споры, что лезть в процессы 1с нельзя (и тот же 1с++ попадает под эти заморочки), то я не юзаю ничего, что можно расценить как декомпеляция, внедрение кода и т.д.
#28 by Torquader
На самом деле можно использовать 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 by Андрюха
А я через NamedPipes
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С