Текущий архив: 2008.04.13;
Скачать: CL | DM;
Вниз
Как получить параметры для уже выполняющейся программы? Найти похожие ветки
← →
andreil © (2008-03-20 17:23) [0]Есть у меня две мои прогораммы. Обе они должны обмениваться сообщениями, типа "распаковать это, сконвертировать то".
Говорю сразу - объеденить обе программы невозможно, тк одна написана на Дельфи, а другая - на С.
Вопрос: как организовать такой обмен сообщениями? Причем этот обмен должен происходить с передачей параметров (строки).
Лично мне на ум приходит SendMessage, но как это организовать?
← →
Kolan © (2008-03-20 17:24) [1]> Лично мне на ум приходит SendMessage, но как это организовать?
Ну так и организовать. Одна посылает сообщения, другая принимает…
← →
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.46 MB
Время: 0.006 c