При переходе на 64-битную платформу 1С:Предприятие (как серверную часть, так и клиентские приложения) разработчики часто сталкиваются с невозможностью загрузить привычные 32-битные библиотеки (DLL) для торгового оборудования и печати штрихкодов. Выясним причину этой проблемы и рассмотрим все способы её решения: от использования системных шлюзов до современных нативных механизмов платформы.
Процесс операционной системы разрядности x64 физически не может загрузить в свое адресное пространство 32-битную динамическую библиотеку (in-process COM или Native). При попытке прямого вызова такой библиотеки из 64-битного сеанса 1С или серверного контекста возникает ошибка загрузки внешней компоненты.
Кроме того, при попытке зарегистрировать и вызвать компонент через COM разработчики часто получают ошибку Ошибка -2147221005 (0x800401F3): Invalid class string. Это означает, что переданный системный идентификатор (ProgID) не найден в реестре Windows из-за неверной регистрации или указания имени файла вместо корректного программного идентификатора объекта.
Если для используемого оборудования нет 64-битной версии драйвера, а вызов необходимо выполнять из 64-битного процесса (например, фонового задания на сервере), разберем по шагам, как запустить 32-битную DLL через службу компонентов Windows:
SysWOW64: C:\Windows\SysWOW64\regsvr32.exe "путь_к_файлу\драйвер.dll". Использование утилиты из System32 в данном случае приведет к ошибке, так как она предназначена для 64-битных библиотек.dcomcnfg), перейдите в ветку «Компьютеры» — «Мой компьютер» — «Приложения COM+». Создайте новое серверное приложение с типом активации «Серверное приложение» (запуск в процессе dllhost.exe).После настройки подключение в коде 1С выполняется через стандартный вызов:
Попытка
ДрайверККТ = Новый COMОбъект("AddIn.Fptr10");
// Работа с методами драйвера
Исключение
ВызватьИсключение "Не удалось инициализировать COM-объект драйвера: " + ОписаниеОшибки();
КонецПопытки;
Важно: Межпроцессный маршалинг через процесс-суррогат dllhost.exe создает задержки при интенсивной передаче данных и может вызывать тайм-ауты при низкоуровневом обмене через COM-порты.
Наиболее надежный и современный способ работы с контрольно-кассовой техникой на 64-битной платформе — использование нативных драйверов, разработанных по технологии NativeAPI под требования «Библиотеки подключаемого оборудования» (БПО).
Ведущие производители оборудования (включая линейки драйверов ККТ от АТОЛ и Штрих-М) поставляют библиотеки, скомпилированные под архитектуры x86 и x64. Проанализируем преимущества такого подхода:
regsvr32.ПодключитьВнешнююКомпоненту() с передачей макета или архива с библиотекой.Для генерации и печати одномерных и двумерных кодов (QR-код, DataMatrix, Code 128, EAN-13) на 64-битной платформе не требуется настраивать сложные COM-обертки. Рассмотрим три актуальных подхода:
УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов");
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "Barcode", ТипВнешнейКомпоненты.Native) Тогда
ГенераторШтрихкода = Новый("AddIn.Barcode.Barcode");
// Настройка параметров и получение двоичных данных изображения
КонецЕсли;
Для полного исключения зависимости от разрядности платформы 1С и операционной системы фискальные регистраторы и кассы подключают по сетевым интерфейсам (Ethernet, Wi-Fi) или через встроенные Web-сервисы оборудования (HTTP REST API). В этом случае 1С отправляет JSON-пакеты с данными чека через стандартный объект HTTPСоединение, что гарантирует стабильную работу как на 32-битных, так и на 64-битных серверах и клиентах.