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

Вниз

Работа с мэйлслотами   Найти похожие ветки 

 
NetDigger ©   (2004-11-15 08:45) [0]

Здравствуйте, уважаемые!

Возник вопрос при работе с мэйлслотами. Есть приложение, которое может выступать либо как клиент, либо как сервер. При запуске сервера открывается мэйлслот-канал, теперь запустив ту же самую программу с помощью кнопки Send можно посылать сообщения серверу, который их, допустим, выводит в ShowMessage. Это теоретически. На практике получается так: если строка задается константой, т.е. идет присвоение типа Message := "test", то все замечательно работает, но стоит попробовать присвоить текст какого-либо контрола (Edit1.Text) - все вылетает c Acces Violation. Грешил на Вин98, однако на винтукее то же самое. Как только не извращался с типами, добавлял насильно нуль в конец строки - БЕС-ПО-ЛЕЗ-НО. Потом решил разделить клиент и сервер - штука точна такая же - не получается. Посмотрите незамыленным глазом - может подскажете, где собака зарыта. И еще - подскажите как то же самое можно реализовать с Named Pipes, сокетами и DDE - вдруг получится там =). Но код с мэйлслотами все равно доделать нужно.



procedure TForm1.Button3Click(Sender: TObject); - создаем сервер
Var
szBuf: String; // само сообщение
cbMsgNumber: DWORD; // количество сообщений в слоте
cbMessages: DWORD;
cbRead: DWORD;// байт прочтено
HS : THandle;
begin
HS := CreateMailSlot(PChar("\\.\mailslot\MySlot"), 0, MAILSLOT_WAIT_FOREVER,nil);
if HS = INVALID_HANDLE_VALUE then
  raise Exception.Create("MailSlotServer: ни черта не создан!");
While( true ) do begin
  If not(GetMailslotInfo( hs, nil, cbMessages, @cbMsgNumber, nil))
        then Halt;
If cbMsgNumber  <> MAILSLOT_NO_MESSAGE then Begin // если есть сообщение-вывести и  выйти из цикла
     ReadFile(hs, szBuf, 200, cbRead, nil);
        ShowMessage( szBuf );
      break;
  End;

End;
 ShowMessage("The message has been showed");
end;

procedure TForm1.Button2Click(Sender: TObject);// а вот посылка сообщения
Var
StrMess : String;
Written: DWORD;
blank: String;
  hC: THandle;
begin
hc:=CreateFile( PChar("\\.\mailslot\MySlot"), GENERIC_WRITE,
               FILE_SHARE_READ,nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If Hc <> INVALID_HANDLE_VALUE then Begin
StrMess := Edit1.text;
  If not(WriteFile(hc,strmess,Length(StrMess)+1, written,nil)) then
    ShowMessage("laja");
  CloseHandle(hc);
End;
end;


 
Игорь Шевченко ©   (2004-11-15 10:37) [1]

http://www.delphimaster.ru/articles/named_pipes/index.html



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

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

Наверх




Память: 0.45 MB
Время: 0.049 c
1-1102947125
Павел
2004-12-13 17:12
2004.12.26
Горизонтальная прокрутка в ListBox.


3-1101219425
Skywalker
2004-11-23 17:17
2004.12.26
Как выбрать из базы определенной количество записей?


3-1101725692
Sanya
2004-11-29 13:54
2004.12.26
Поиск в DBGrid


3-1101447040
LEXX_55
2004-11-26 08:30
2004.12.26
SQL


14-1102103351
Gero
2004-12-03 22:49
2004.12.26
Водная система охлаждения проца своими руками





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский