.
Tuesday 22nd of May 2012    

Информация

Счетчики

Голосование

Лучшая марка телефона
 

Реклама

фильмы онлайн

фильмы онлайн


Подключение к именованному каналу клиентского приложения
загрузка...

Клиентское приложение не столь чопорно, как сервер именованных каналов, и поэтому может создаваться в любой 32-разрядной версии Windows. Подключение клиента к каналу осуществляется либо методом FileCreate(), либо при помощи метода CallNamedPipe(). Первый вариант подходит в ситуациях, когда по каналу предполагается передавать поток байт, второй - когда канал специализируется на работе с сообщениями. Если канал свободен, метод возвращает дескриптор канала. Если канал занят, клиентское приложение имеет право подождать освобождения канала, но для этого потребуется вызвать метод WaitNamedPipe().

Рассмотрим пример применения метода FileCreate():

function ConnectToBytePipe(const PipeName: string; var hPipe: THandle): Cardinal; begin

hPipe:=FileCreate(PipeName); //передаем в параметр наименование канала

Result:=CARDINAL(GetLastError()); if Result>0 then begin

{действия, если канал отсутствует, занят и т.п.} //...

MessageBox(frmMain.Handle,

PChaKFormatCGwa^/od'+JflS+Tos', [ErrorCod, SysErrorMessage(ErrorCod)])), PChar('Gшибка'), MB_ICONERROR+MB_OK);

end;

end;

После попытки получить дескриптор канала с именем PipeName метод обязательно проверяет код последней ошибки. Если метод GetLastError() вернул значение, отличное от нуля, т. е. произошла какая-то ошибка, мы извещаем об этом пользователя сообщением, а код ошибки возвращаем в качестве результата выполнения всей функции.

ОЕсли именованный канал создан с применением ключа PIPE_TYPE_MESSAGE и соответственно по нему передаются отдельные сообщения, то для соединения с каналом вместо метода FileCreate() клиентское приложение должно применять метод CallNamedPipe(). При попытке вызвать этот метод для соединения с каналом, специализирующимся на передаче потока байт, функция возвратит сообщение об ошибке.

Метод CallNamedPipe() подключается к именованному каналу, при необходимости ждет его освобождения, осуществляет единовременную операцию чтения и записи и отключается от канала.

function CallNamedPipe(PipeName : pAnsiChar; InBuffer : Pointer;

InBufferSize : Cardinal; OutBuffer : Pointer; OutBufferSize : Cardinal; var BytesRead : Cardinal; TimeOut : Cardinal) : boolean.


загрузка...
 

Самое популярное:

bottom

карта сайта