Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 144

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 166 >> Следующая

В Windows 95/98/МЕ эта функция не может быть использована для чтения данных из СОМ-порта.
Формат заголовка ReadFileEx на языке С имеет следующий вид:
BOOL ReadFileEx(
HANDLE hFile, // дескриптор объекта
LPVOID lpBuffer, // буфер для данных
DWORD dwBufLen, I/ число байт для чтения
LPOVERLAPPED lpOverlapped, // параметры асинх. чтения // callback-процедура, выполняемая по завершении чтения LP_OVERLAPPED_COMPLETION_ROUTINE lpComletionRoutine
);
Формат заголовка ReadFileEx на языке Delphi имеет следующий вид:
function ReadFileEx(
hFile : THandle; // дескриптор объекта
lpBuffer : Pointer; // буфер для данных
nNumberOfBytesToRead: DWORD; // число байт для чтения
lpOverlapped : POverlapped; // параметры асинх. чтения
// callback-процедура, выполняемая по завершении чтения lpCompletionRoutine : TPROverlappedCompletionRoutine
): BOOL;
Все параметры кроме последнего совпадают с параметрами функции ReadFile. Последний параметр задает адрес процедуры, которая будет выполнена по завершении чтения данных. Эта процедура должна иметь тип TPROverlappedCompletionRoutine, описываемый следующим образом:
VOID CALLBACK FileIOCompletionRoutine( DWORD dwErrorCode, // код ошибки
DWORD dwNumberOfBytesTransfered, Il число прочитанных байт
LPOVERLAPPED" lpOverlapped // асинхронная структура
);
В Delphi тип этой процедуры описан как обычный указатель, без спецификации параметров:
type
TPROverlappedCompletionRoutine = TFarProc;
На самом деле формат заголовка этой процедуры в Delphi должен быть такой, как показан в листинге 16.5.
Глава 16. Базовые функции Windows
479
Параметры callback-процедуры имеют следующий смысл:
? dwErrorCode принимает значение 0, если операция успешна;
? dwNumberofBytesTransfered равен числу прочитанных байтов или 0, если функция завершена с ошибкой;
? lpoveriapped передает структуру асинхронного чтения.
16.4.1. Возвращаемое значение
При успешном завершении функция ReadFiieEx возвращает ненулевое значение, а при ошибочном — ноль, при этом код ошибки можно получить с ПОМОЩЬЮ вызова GetLastError.
16.4.2. Дополнительные сведения
Для завершения всех асинхронных операций может использоваться функция
Cancello.
Функция ReadFiieEx игнорирует параметр hEvent в структуре lpoveriapped и он может использоваться программой.
16.4.3. Пример вызова
Листинг 16.5 показывает пример использования ReadFiieEx. Обратите внимание, что процедура, вызываемая при завершении операции, должна иметь спецификатор stdcall.
истинг.16 5. Пример, использования функции ReadFiieEx
* ^ *лі....ч?ї/?.?Ріт..^'л'А*.!.'.v*:.?-.».л............-_'iY................t....................!^..-л......*...............................:
Procedure TReadThread.Execute;
Var ReadOL : TOverLapped; {структура для асинхронного чтения}
{Callback-процедура, вызывающаяся при получении байта} Procedure OnCompletionRead( dwErrorCode, dwNumberofBytesTransfered !Cardinal; var lpOverlapped : TOverlapped ); stdcall; begin end; Begin With FOwner do
While (not Terminated) and Connected do begin {пока порт открыт}
480
Часть V. Справочник
{Запуск операции асинхронного чтения}
ReadFileEx(FHandle, @FByte, 1, @ReadOL, SOnCompletionRead); (Ожидание завершения операции} SleepEx(INFINITE, True);
{Сюда мы попадем, только когда байт будет принят} Synchronize(DoReadByte); End; End;
16.5. Функция WriteFileEx: АРС-передача данных
Функция WriteFileEx производит асинхронную запись данных. Работа этой функции похожа на вызов функции writeFiie в режиме асинхронной записи, но WriteFileEx позволяет профамме выполнять другие действия во время записи (передачи) данных. При завершении записи будет вызвана специальная callback-процедура.
В Windows 95/98/МЕ эта функция не может быть использована для чтения данных из СОМ-порта.
Формат заголовка WriteFileEx на языке С имеет следующий вид:
BOOL WriteFileEx (
HANDLE hFile, Il дескриптор объекта
LPCVOID lpBuffer, // буфер для данных
DWORD dwBufLen, Il число байтов для записи
LPOVERLAPPED lpOverlapped, Il параметры асинх. записи // callback-процедура, выполняемая по завершении записи LP_OVERLAPPED_COMPLETION_ROUTINE lpComletionRoutine
);
Формат заголовка WriteFileEx на языке Delphi имеет следующий вид:
function WriteFileEx(
hFile : THandle; Il дескриптор объекта
lpBuffer : Pointer; Il буфер для данных
nNumberOfBytesToWrite: DWORD; Il число байт для записи
const lpOverlapped : TOverlapped; // параметры асинх. записи lpCompletionRoutine: FARPROC
): b00l;
Глава 16. Базовые функции Windows
481
Все параметры этой функции совпадают с параметрами функций wnteFiie
И ReadFileEx.
16.5.1. Возвращаемое значение
При успешном завершении функция WriteFileEx возвращает ненулевое значение, а при ошибочном — ноль. Код ошибки можно получить с помощью ВЫЗОва GetLastError.
16.5.2. Пример вызова
Листинг 16.6 показывает пример использования WriteFileEx. Обратите внимание на спецификатор stdcail функции обратного вызова
OnComplе 11OnWr11 е.
^Листинг 16.6. Пример использования функции Writf FiIeSx
Предыдущая << 1 .. 138 139 140 141 142 143 < 144 > 145 146 147 148 149 150 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100