О библиотеке OwenLibFileAsync.
Читаю только что скачанную документацию.
Какая-то путаница с возвращаемыми типами у функций:
Функция SysFileOpenAsync
Функция возвращает значение типа DWORD
Функция SysFileCloseAsync
возвращает значение типа BOOL
Функция SysFileWriteAsync
возвращает значение типа DWORD – количество записанных байт данных
А в примерах функции вызываются в виде:
res:=OwenFileXxxAsync(xxx);
переменная res имеет тип ASYNC_RET_VALUE (в документации отсутствует описание этого типа, догадайся сам)
Ну ладно, ASYNC_RET_VALUE, допустим, совместимо с DWORD (как по мне, должна быть ошибка), но DWORD и BOOL один и тот же тип?
Примеры с IF-ами и CASE-ми выглядят громоздко и запутанно.
Я бы хотел написать так:
Код:
(***********************************************************)
VAR
f_work: T_F_WORK; (*перечислимый тип: открыть, закрыть, записать и т.д.*)
res: ASYNC_RET_VALUE;
END_VAR
(*вызываем нужную функцию*)
CASE f_work OF
F_OPEN:
res := OwenFileOpenAsync(f_name,'a',ADR(f_handle));
F_CLOSE:
res := OwenFileCloseAsync(f_handle, ADR(f_result));
F_WRITE:
res := OwenFileWriteAsync(f_handle, ADR(f_buff), SIZEOF(f_buff), ADR(f_result));
F_NONE: ;
END_CASE
(*обрабатываем результат*)
CASE res OF
ASYNC_WORKING: (*ждем...*);
ASYNC_DONE:
f_work := F_NONE;
(*проверка на ошибки*)
(*...*);
(*а еще res возвращает некоторые ошибки!*)
(*как к ним относиться, неясно*)
(*но ведь как-то надо обработать!*)
(* ASYNC_PAUSED:
ASYNC_QUERY_FULL:
ASYNC_BLOCK_ACCESS:
ASYNC_GENERAL_ERROR:
ASYNC_INVALID_HANDLE_ERROR:
*)
END_CASE
(********************************************************************)
Гораздо компактнее и проще.
И опять, в описании не сказано, имеется ли логическая переменная для возврата наличия ошибки для всех функций (в старом описании такая переменная имелась). А ведь это позволит написать обработку файловых ошибок в одном месте, а не размазывать по всей программе.
Документацию надо бы поправить и дополнить.