Администрирование · 11 мин
Как зарегистрировать библиотеку DLL в 1С
Как зарегистрировать DLL в 1С: regsvr32, COM-объекты, внешние компоненты Native API, разрядность, типичные ошибки и способы их устранения.
Подключение внешней DLL-библиотеки к 1С — типовая задача при интеграции с торговым оборудованием, криптографическими средствами, банковскими клиентами и сторонними сервисами. Способ регистрации зависит от того, как устроена сама библиотека: это может быть COM-объект, регистрируемый системной утилитой regsvr32, или внешняя компонента по технологии Native API, подключаемая штатными средствами платформы.
Ошибки при регистрации приводят к характерным сообщениям вида «Не удалось создать объект», «Класс не зарегистрирован» или «Внешняя компонента не найдена». В большинстве случаев причина — несовпадение разрядности библиотеки и клиента 1С, недостаток прав или попытка зарегистрировать компоненту не тем инструментом.
Ниже разобраны оба основных сценария: регистрация COM-библиотеки через regsvr32 и подключение внешней компоненты через механизм «ПодключитьВнешнююКомпоненту». Отдельно рассмотрены вопросы разрядности, прав доступа, проверки результата и типичных ошибок.
Определите тип библиотеки перед регистрацией
Прежде чем что-либо регистрировать, нужно понять, с каким типом DLL вы работаете. От этого зависит весь дальнейший порядок действий. Существует два распространённых варианта.
Первый — COM-библиотека (ActiveX). Такие компоненты регистрируются в реестре Windows и создаются в 1С через конструкцию Новый COMОбъект("Имя.Класса"). Признак: поставщик библиотеки указывает ProgID вида «AddIn.Something» или рекомендует regsvr32.
Второй — внешняя компонента по технологии Native API или COM-технологии 1С. Она поставляется в виде DLL (часто упакованной в ZIP-архив вместе с манифестом) и подключается методом ПодключитьВнешнююКомпоненту. Регистрация в реестре Windows для Native API обычно не требуется.
Регистрация COM-библиотеки через regsvr32
Стандартный способ регистрации COM-DLL — системная утилита regsvr32. Она вызывает экспортируемую функцию DllRegisterServer внутри библиотеки, которая прописывает сведения о классах в реестре Windows.
Откройте командную строку от имени администратора (Пуск → введите cmd → правый клик → «Запуск от имени администратора») и выполните команду, указав полный путь к файлу. Если путь содержит пробелы, заключите его в кавычки.
regsvr32 "C:\Components\MyLibrary.dll"Успешная регистрация подтверждается диалоговым окном «DllRegisterServer in ... succeeded». Сообщение об ошибке с кодом 0x80070005 означает нехватку прав — командная строка запущена без административных привилегий. Ошибка «модуль загружен, но точка входа DllRegisterServer не найдена» говорит о том, что файл не является саморегистрируемойся COM-библиотекой.
Для отмены регистрации (например, перед заменой версии) используется ключ /u: regsvr32 /u "C:\Components\MyLibrary.dll". После перерегистрации перезапустите сеанс 1С, так как клиент кэширует загруженные библиотеки.
Разрядность: почему 32-битная DLL не видна 64-битному клиенту
Самая частая причина ошибки «Класс не зарегистрирован» при корректно выполненной regsvr32 — несовпадение разрядности. COM-библиотека должна совпадать по разрядности с тем процессом, который её загружает: тонкий или толстый клиент 1С либо сервер 1С (если объект создаётся на сервере).
На 64-битной Windows существуют две версии regsvr32. 64-битная находится в C:\Windows\System32\regsvr32.exe, а 32-битная — в C:\Windows\SysWOW64\regsvr32.exe. Для 32-битной DLL нужно явно вызвать утилиту из SysWOW64, иначе библиотека зарегистрируется в 64-битном разделе реестра и будет недоступна 32-битному клиенту.
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyLibrary.dll"Если библиотека существует только в 32-битной версии, а у вас 64-битный клиент 1С, вариантов два: использовать 32-битную версию клиента либо создавать COM-объект на стороне, где доступна подходящая разрядность (например, перенести вызов на сервер с 32-битным рабочим процессом, если архитектура это позволяет).
Как выбрать действие по разрядности
Подключение внешней компоненты Native API
Компоненты Native API не требуют regsvr32. Они подключаются программно методом ПодключитьВнешнююКомпоненту, которому передаётся либо путь к файлу DLL, либо имя макета конфигурации, содержащего компоненту в виде ZIP-архива.
Типовой код подключения из файла выглядит так: сначала вызывается ПодключитьВнешнююКомпоненту("C:\Components\MyAddIn.dll", "MyAddIn", ТипВнешнейКомпоненты.Native), затем создаётся объект через Новый("AddIn.MyAddIn.ИмяОбъекта"). Если подключение вернуло Ложь или вызвало исключение, проверьте путь, разрядность и соответствие версии API компоненты версии платформы.
Рекомендуемая практика для прикладных решений — хранить компоненту в макете конфигурации (общий макет с типом «Двоичные данные» или «ZIP-архив») и подключать её оттуда. Тогда библиотека доставляется вместе с конфигурацией, не зависит от файловой системы клиентских машин и автоматически доступна всем пользователям.
- 1Добавьте в конфигурацию общий макет и загрузите в него ZIP-архив компоненты
- 2В коде вызовите ПодключитьВнешнююКомпоненту с именем макета и типом Native
- 3Проверьте возвращаемое значение: Истина означает успешное подключение
- 4Создайте объект компоненты через Новый("AddIn.Имя.Объект")
- 5Вызовите тестовый метод компоненты и убедитесь в корректном ответе
Регистрация на сервере 1С и для всех пользователей
Если COM-объект создаётся в серверном коде, регистрировать библиотеку нужно на сервере 1С, а не на компьютерах пользователей. Учётная запись, под которой работает агент сервера 1С (по умолчанию специальная служебная учётная запись), должна иметь доступ к файлу DLL и к соответствующим веткам реестра.
Для файловых баз и клиентского кода регистрация выполняется на каждом рабочем месте. В доменной сети это удобно автоматизировать через групповые политики или скрипт входа, который копирует DLL в локальный каталог и вызывает regsvr32 с ключом /s (тихий режим без диалоговых окон).
Избегайте размещать DLL в каталогах с ограниченным доступом или в профилях конкретных пользователей, если компонент нужен нескольким сотрудникам. Надёжный вариант — отдельный каталог вроде C:\Components с правами на чтение и выполнение для группы пользователей 1С.
Проверка результата и типичные ошибки
После регистрации проверьте результат минимальным тестом. Для COM-библиотеки выполните в 1С код: Попытка: Объект = Новый COMОбъект("Имя.ProgID"); Исключение: Сообщить(ОписаниеОшибки()); КонецПопытки. Успешное создание объекта без исключения подтверждает, что регистрация прошла корректно и разрядность совпадает.
Как проверить результат
Объект создан, методы вызываются без исключений
Ошибка «Класс не зарегистрирован» или «Недопустимая строка с указанием класса»
Сообщение DllRegisterServer succeeded, код возврата 0
Код 0x80070005 (нет прав) или сообщение об отсутствии точки входа
ПодключитьВнешнююКомпоненту вернул Истина
Возврат Ложь или исключение «Внешняя компонента не найдена»
Частая ошибка — регистрация библиотеки, зависящей от других DLL, которые отсутствуют в системе. В этом случае regsvr32 сообщает, что модуль не найден, хотя сам файл существует. Проверьте, что рядом с библиотекой лежат все сопутствующие файлы из комплекта поставки, а требуемые системные библиотеки (например, распространяемые пакеты Visual C++) установлены.
Ограничения и меры безопасности
Внешние DLL выполняются в процессе 1С с полными правами этого процесса. Вредоносная или некорректно написанная библиотека способна повредить данные информационной базы или получить доступ к содержимому памяти приложения. Подключайте компоненты только от доверенных поставщиков и проверяйте цифровую подпись файла, если она есть.
Учтите ограничение веб-клиента: в браузере внешние компоненты работают только через механизм расширения для работы с файлами и внешними компонентами 1С, и не всякая компонента совместима с этим режимом. Для веб-клиента компонента должна быть собрана под все используемые браузеры и операционные системы пользователей.
Перед обновлением платформы 1С проверяйте совместимость подключённых компонент: смена версии платформы иногда меняет требования к интерфейсам Native API, и старая сборка библиотеки может перестать загружаться.
Что важно запомнить
Определите тип DLL: COM-библиотеки регистрируются через regsvr32 с учётом разрядности, компоненты Native API подключаются методом ПодключитьВнешнююКомпоненту из файла или макета. Регистрируйте библиотеку там, где создаётся объект (клиент или сервер), проверяйте результат тестовым созданием объекта и подключайте компоненты только из доверенных источников.
Частые вопросы
Что делать, если regsvr32 пишет «модуль загружен, но точка входа не найдена»?
Файл не является саморегистрируемойся COM-библиотекой. Скорее всего, это обычная DLL или компонента Native API. Уточните у поставщика способ подключения: для Native API используйте ПодключитьВнешнююКомпоненту, для обычных библиотек — специализированные механизмы вызова, если они предусмотрены поставщиком.
Нужно ли регистрировать DLL заново после обновления 1С?
Записи COM-регистрации хранятся в реестре Windows и не зависят от версии платформы, поэтому повторная регистрация обычно не требуется. Однако после обновления стоит проверить совместимость самой компоненты с новой версией платформы, особенно для Native API.
Можно ли зарегистрировать DLL без прав администратора?
Стандартная regsvr32 пишет в раздел реестра HKEY_LOCAL_MACHINE и требует прав администратора. Некоторые библиотеки поддерживают регистрацию на уровне пользователя (в HKEY_CURRENT_USER), но это должно быть предусмотрено самой компонентой. Практичная альтернатива без прав администратора — компоненты Native API, подключаемые из файла или макета.
Почему компонента подключается на одном компьютере, но не работает на другом?
Чаще всего отличается разрядность клиента 1С или отсутствуют зависимые библиотеки (например, распространяемые пакеты Visual C++). Сравните версию и разрядность платформы на обоих машинах и убедитесь, что на проблемном компьютере установлены все компоненты из комплекта поставки.
Как удалить зарегистрированную библиотеку?
Выполните regsvr32 /u с полным путём к DLL в командной строке от имени администратора, соблюдая ту же разрядность утилиты, что использовалась при регистрации. После этого файл можно удалить или заменить новой версией. Сеансы 1С, в которых библиотека уже загружена, нужно перезапустить.
Работает ли подключение DLL в Linux-версии сервера 1С?
Windows-библиотеки DLL напрямую в Linux не загружаются. Для сервера на Linux компонента должна быть собрана поставщиком в виде разделяемой библиотеки .so по технологии Native API. COM-объекты на Linux недоступны, поэтому решения, завязанные на COM, требуют переноса соответствующего кода на Windows-узел или замены компоненты.