О проекте:
Был разработан низкоуровневый драйвер для обмена данными через COM-порт (внешняя компонента) по технологии 1С:Native API на языке C++ (MSVC 2022). Компонента кроссплатформенная и бинарно совместима как с 32-битными (x86), так и с 64-битными (x64) релизами платформы 1С (включая Обычное приложение и Управляемые формы «Такси»).
Плюсы проекта:
Стандартные COM-объекты (например, .NET SerialPort) при вызове асинхронных событий вызывают микросбои потоков и аварийно роняют процесс 1cv8.exe в Управляемых формах. Данная компонента изолирует потоки ввода-вывода от ядра 1С, обеспечивая 100% отказоустойчивость.
Технические вызовы, которые были успешно решены:
Низкоуровневая асинхронность: Создан фоновый C++ поток (std::thread), выполняющий непрерывный неблокирующий опрос COM-порта по WinAPI-таймаутам (COMMTIMEOUTS) с защитой ресурсов через мьютексы (std::mutex), что исключило зависание интерфейса 1С.
Бинарная совместимость: Реализовано строгое выравнивание стека (__stdcall / ADDIN_API) и очистка таблицы экспорта линкера от Name Mangling через .def файлы.
Безопасная работа с кучей: Реализовано динамическое выделение памяти для строк встроенного языка через менеджер памяти платформы (IMemoryManager::AllocMemory), что полностью исключило утечки памяти и Heap Corruption при валидации компоненты.
Асинхронные уведомления: Данные из порта переводятся в HEX-строку и мгновенно передаются в 1С через механизм ExternalEvent (обрабатываются в процедуре ВнешнееСобытие формы).
https://github.com/AntonLemur/DeviceLink/tree/main/DeviceLink