Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Как получить параметры для уже выполняющейся программы?   Найти похожие ветки 

 
andreil ©   (2008-03-20 17:23) [0]

Есть у меня две мои прогораммы. Обе они должны обмениваться сообщениями, типа "распаковать это, сконвертировать то".
Говорю сразу - объеденить обе программы невозможно, тк одна написана на Дельфи, а другая - на С.

Вопрос: как организовать такой обмен сообщениями? Причем этот обмен должен происходить с передачей параметров (строки).
Лично мне на ум приходит SendMessage, но как это организовать?


 
Kolan ©   (2008-03-20 17:24) [1]

> Лично мне на ум приходит SendMessage, но как это организовать?

Ну так и организовать. Одна посылает сообщения, другая принимает&#133


 
Palladin ©   (2008-03-20 17:42) [2]


> объеденить обе программы невозможно, тк одна написана на
> Дельфи, а другая - на С.

не, ну я понимаю, была"б одна под солярис, другая под win95. тогда, да, поблемы. а так... не аргумент"с...


 
Семеныч   (2008-03-20 18:11) [3]

> andreil ©   (20.03.08 17:23)

Если параметры умещаются в WParam и LParam, то можно слать любое сообщение (см. RegisterMessage). А если нет, то надо слать WM_COPYDATA.


 
ЦУП ©   (2008-03-20 19:01) [4]

Также можно испольовать Pipe"s, Soket"s, MailSlot"s...


 
andreil ©   (2008-03-20 19:50) [5]

Мне надо переслать строку ;)
Сделал так:
SendMessage(Handle, UpkMessage, 0, DWORD(pChar("msg"))); -у "клиента"
function TForm1.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
begin
 result:=false;
 if Msg.message=UpkMessage then
   MessageBox(Form.Handle, pChar(Msg.lParam), "", 0);
end;
- у "сервера".
В итоге - тарабарщина вместо текста :(


 
ЦУП ©   (2008-03-20 19:51) [6]


> andreil ©   (20.03.08 19:50) [5]


см.
> Семеныч   (20.03.08 18:11) [3]



>...  А если нет, то надо слать WM_COPYDATA.


 
Семеныч   (2008-03-20 19:57) [7]

> andreil ©   (20.03.08 19:50) [5]

> тарабарщина вместо текста

Правильно. Вы передали адрес и он успешно передался. Но по этому адресу в программе-получателе находится совсем не то, что в программе отправителе.

Помните фильм "Ирония судьбы или с легким паром"? То же и здесь.

WM_COPYDATA Вам нужно. Тогда переданы будут сами данные, а не их адреса.


 
andreil ©   (2008-03-20 20:16) [8]

Все, ответ нашел:
получатель:

procedure  ReceiveMessage  (var  Msg:  TMessage);  message  WM_COPYDATA;
..
procedure  TFormReceive.ReceiveMessage;
var
    pcd  :  PCopyDataStruct;
begin
    pcd  :=  PCopyDataStruct(Msg.LParam);
    Caption  :=  PChar(pcd.lpData);
end;

отправитель:

procedure  TFormXXX.Button1Click(Sender:  TObject);
var
  cd  :  TCopyDataStruct;
begin
  cd.cbData  :=  Length(Edit1.Text)+1;
  cd.lpData  :=  PChar(Edit1.Text);
  SendMessage  (  FindWindow("TFormReceive",  nil),
                              WM_COPYDATA,
                              0,
                              LParam(@cd));
end;

Leonid  Troyanovsky


 
Германн ©   (2008-03-20 21:43) [9]


> Семеныч   (20.03.08 19:57) [7]
> Помните фильм "Ирония судьбы или с легким паром"? То же и здесь.

Плагиат :)



Страницы: 1 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-1195499499
Nucer
2007-11-19 22:11
2008.04.13
Работа с ADO


2-1205583312
alex_kasycky
2008-03-15 15:15
2008.04.13
Залипающие кнопки


2-1205851058
Vik
2008-03-18 17:37
2008.04.13
SQL, сетевой вариант


15-1203938605
Nogard
2008-02-25 14:23
2008.04.13
ZIP архивы


4-1186600664
cerber
2007-08-08 23:17
2008.04.13
запуск документа ворд из ресурса.