Добрый день!
Библиотека на C требует предоставить ей FILE* от настроенного COM-порта. Для настройки я, естественно, пользуюсь SetCommState, соответственно, мне нужно получить HANDLE. Если я начинаю с HANDLE, попытка получить файловый дескриптор из handle завершается неудачно с errno=22:
http://pastebin.com/c1RcVh7D
int qc9200_fd = _open_osfhandle((intptr_t)qc9200_handle, _O_RDWR|_O_BINARY);
Если я начинаю с получения файлового дескриптора:
int qc9200_fd = _topen(path, _O_RDWR|_O_BINARY);
или с FILE*:
FILE* qc9200 = _tfopen(path, "r+b");
они оба с небольшой задержкой возвращают ошибку (-1 и NULL соответственно) и устанавливают errno=13, даже если запускать программу от администратора, хотя CreateFile в такой же ситуации завершается успешно.
Согласно
http://stackoverflow.com/questions/5193579/how-make-file-from-handle-in-winapi и
http://stackoverflow.com/questions/3989545/how-do-i-get-the-file-handle-from-the-fopen-file-structure, оба преобразования, которые я пытаюсь выполнить, должны сработать.
COM-порт COM9 получен по Bluetooth и совершенно точно работает (с ним работают любые предназначенные для COM-портов терминалки).
Что я делаю не так? Как добиться от системы FILE* с COM-портом?