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

Вниз

Не работает посылка сообщения в другую прогу!!!   Найти похожие ветки 

 
oduvan ©   (2002-08-13 17:20) [0]

Сообщение посылается, но теряются данные (это когда обмениваются 2 программы). Если весь этот код поместить в одну программу все работает, что я делаю не так???

Имеется:

const
WM_MAIN=WM_USER+10000;

type
TWMMain=packed record
msg:Cardinal;
Email:PCHar;
Text:PCHar;
end;

В одной форме:

SendMessage(FindWindow(pchar("TPostForm"),nil),WM_MAIN, integer(pChar(v1)),integer(pChar(v2)));

В другой:

private
procedure GetEmail(var msg:TWMMain);message WM_MAIN;
.......

procedure TPostForm.GetEmail(var msg:TWMMain);
begin
SetForegroundWindow(handle);
SetWindowPos(handle,HWND_TOPMOST,left,top,width,height,SWP_SHOWWINDOW);
SetWindowPos(handle,HWND_NOTOPMOST,left,top,width,height,SWP_SHOWWINDOW);
showmessage(msg.Email+" "+msg.Text); <- Тут выдает ошибку
end;


 
cdaDmitriy ©   (2002-08-13 17:26) [1]

потому что integer(pChar(v1)),integer(pChar(v2) имеет смысл только в первом потоке и адрес в этом потоке а не во втором


 
Игорь Шевченко ©   (2002-08-13 17:29) [2]

cdaDmitriy © (13.08.02 17:26)

В одном процессе.

oduvan © (13.08.02 17:20)

используйте WM_COPYDATA


 
cdaDmitriy ©   (2002-08-13 17:34) [3]

>> Игорь Шевченко да я конечно имел ввиду ( в 2 процессах )

и что WM_COPYDATA поможет ??? не уверен

Думаю нужно из строки получить <ATOM> и его уже передавать


 
Игорь Шевченко ©   (2002-08-13 17:41) [4]

cdaDmitriy © (13.08.02 17:34)

Поможет. (с) Джеффри Рихтер


 
oduvan ©   (2002-08-13 18:08) [5]

А как пользоваться этой WM_COPYDATA???
Можно пример для отправки данных и для получения, мне необходимо в программе передать 2 текстовых параметра, как реализовать?


 
Игорь Шевченко ©   (2002-08-13 18:11) [6]

oduvan © (13.08.02 18:08)

Можно пример. У Джеффри Рихтера в книжке


 
oduvan ©   (2002-08-13 18:20) [7]

Не ну на самом деле, елси ты понимаешь в этом, что тебе мешает объяснить? Хелп ми Плиз!


 
cdaDmitriy ©   (2002-08-13 18:24) [8]

(с) Джеффри Рихтер конечно поможет но и там написано :

Увидев, что Вы посылаете сообщение WM_COPYDATA, SendMessage создает проек цию файла размером cbData байтов и копирует данные из адресного пространства Вашей программы в эту проекцию. Затем отправляет сообщение окну-приемнику При обработке этого сообщения принимающей оконной процедурой параметр lParam указывает на структуру COPYDATASTRUCT, которая находится в адресном простран стве процесса-приемника Элемент lpData этой структуры указывает на проекцию файла в адресном пространстве процесса-приемника.


и тоже можно решить ( Я думаю ) с

ATOM GlobalAddAtom( LPCTSTR lpString
// pointer to the string to add
);



 
Игорь Шевченко ©   (2002-08-13 18:29) [9]

Джеффри Рихтер пишет правильно. А зачем таблицу атомов мучить ? Она не резиновая :-)))
Кстати, создается не совсем проекция файла, а просто выделяется область виртуальной памяти (section)


 
oduvan ©   (2002-08-13 18:37) [10]

ВСе ок! WM_COPYDATA работет отлично!



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
14-98331
Сатир
2002-09-05 16:56
2002.09.30
Асм


8-98234
BorisMor
2002-06-03 14:22
2002.09.30
MP3 -> WAV


14-98321
MAXHO
2002-09-04 23:29
2002.09.30
Помогите начинающему програмисту-игроделу :)


1-98202
mate
2002-09-17 12:10
2002.09.30
Печать


1-98083
Dmitriy Polskoy
2002-09-19 17:34
2002.09.30
Куда пропадает ключ?