К статье
Практический материал

Администрирование · 8 мин

Как зарегистрировать DLL для работы с 1С

Как зарегистрировать DLL в 1С: regsvr32 от имени администратора, разрядность 32/64, подключение внешних компонент Native API и типичные ошибки регистрации.

Библиотека DLL подключается к 1С в двух принципиально разных сценариях: как COM-объект, который регистрируется в Windows системной утилитой regsvr32, и как внешняя компонента по технологии Native API, которую загружает сама платформа 1С методом ПодключитьВнешнююКомпоненту. Ошибки вроде «Не удалось создать объект» или «Тип не определен» почти всегда означают, что DLL либо не зарегистрирована, либо зарегистрирована не той разрядности, либо без прав администратора.

Классическая ситуация: обработка в 1С вызывает COM-объект сканера штрихкодов, ККТ-драйвера или стороннего обмена, а после переустановки Windows или обновления платформы вызов перестаёт работать. Причина — запись о DLL в реестре потерялась или ссылается на старый путь. Повторная регистрация занимает минуту, если знать три вещи: разрядность библиотеки, разрядность клиента 1С и правильную команду.

Ниже разобраны оба способа регистрации, проверка результата, работа с 32- и 64-разрядными версиями и типичные ошибки с их причинами.

Как определить, какой тип DLL у вас

Перед регистрацией важно понять, что за библиотека у вас в руках, потому что способы подключения не взаимозаменяемы. COM-DLL создаёт объект через механизм Windows (в 1С это выглядит как Новый COMОбъект("Имя.Объекта")), и такая библиотека обязана быть прописана в реестре. Внешняя компонента 1С по технологии Native API поставляется обычно в zip-архиве (макете) и подключается программно из кода конфигурации — запись в реестре ей не нужна.

Простой признак: если поставщик компоненты дал инструкцию «выполните regsvr32» или в поставке есть файл с расширением .dll и упоминание ProgID вида «AddIn.Scanner» — это COM. Если компонента распространяется как zip-файл, который добавляется в макет конфигурации, — это Native API, и regsvr32 для неё бесполезен.

Регистрация COM-DLL через regsvr32

Стандартный способ — утилита regsvr32, встроенная в Windows. Запускать её нужно из командной строки, открытой от имени администратора: иначе запись в ветку реестра HKEY_LOCAL_MACHINE будет отклонена, хотя ошибка может выглядеть по-разному. Положите DLL в постоянную папку (например, C:\Components), потому что после регистрации перемещать или удалять файл нельзя — реестр хранит полный путь.

cmd
regsvr32 "C:\Components\MyComponent.dll"

После выполнения появится диалог «DllRegisterServer in ... succeeded» — это признак успешной регистрации. Если вместо этого ошибка 0x80070005 — не хватило прав, перезапустите командную строку с повышением. Ошибка 0x80004005 часто означает, что DLL зависит от других библиотек, которых нет в системе, либо файл повреждён.

Порядок регистрации COM-DLL
  1. 1
    Скопируйте DLL в постоянную папку без русских букв и пробелов в пути
  2. 2
    Откройте командную строку от имени администратора
  3. 3
    Выполните regsvr32 с полным путём к DLL (для 32-битной DLL на 64-битной ОС — через SysWOW64)
  4. 4
    Дождитесь сообщения об успешной регистрации
  5. 5
    Перезапустите клиент 1С и проверьте создание объекта

Разрядность: 32 и 64 бита

Самая частая причина «не работает после регистрации» — несовпадение разрядности. Клиент 1С бывает 32-разрядным и 64-разрядным, и COM-объект он может загрузить только своей разрядности. На 64-разрядной Windows 32-битные DLL регистрируются отдельно — через regsvr32 из папки SysWOW64, а не System32 (названия папок исторически перепутаны: в System32 лежат 64-битные компоненты).

cmd
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyComponent.dll"

Если вы зарегистрировали 32-битную DLL обычным regsvr32, она попадёт в 64-битный раздел реестра, и 32-битный клиент 1С её не увидит. Проверить разрядность самой DLL можно, открыв её в просмотрщике PE-заголовков или косвенно — по документации поставщика. Если доступна только 32-битная версия компоненты, а сервер 1С 64-разрядный, объект создают на стороне клиента или на отдельном 32-битном процессе.

Подключение внешних компонент 1С (Native API)

Для компонент Native API регистрация в Windows не требуется. Компонента хранится в конфигурации как zip-макет и подключается кодом: сначала УстановитьВнешнююКомпоненту("ОбщийМакет.ИмяМакета"), затем ПодключитьВнешнююКомпоненту("ОбщийМакет.ИмяМакета", "Имя", ТипВнешнейКомпоненты.Native), после чего создаётся объект Новый("AddIn.Имя.Объект"). В пользовательском режиме платформа сама предложит установить компоненту при первом обращении.

В файловой базе установка происходит в папку профиля пользователя, в клиент-серверном варианте — на сервере 1С, если компонента используется в серверном коде. Убедитесь, что в zip-архиве есть версии под нужные платформы (Windows x86, x64, при необходимости Linux), иначе на части рабочих мест компонента не подключится.

Проверка результата

После регистрации COM-DLL проверьте её из самой 1С: выполните в консоли кода создание объекта с нужным ProgID. Если строка Объект = Новый COMОбъект("Vendor.Component") выполнилась без исключения — регистрация успешна и разрядность совпала. Ошибка «Недопустимая строка с указанием класса» означает, что ProgID не найден в реестре нужной разрядности.

Контрольные точки

Как проверить результат

Сообщение regsvr32
Норма

DllRegisterServer succeeded

Тревожный признак

Код ошибки 0x80070005 или 0x80004005

Создание COM-объекта в 1С
Норма

Объект создан, методы вызываются

Тревожный признак

«Недопустимая строка с указанием класса»

Запись в реестре
Норма

ProgID есть в HKCR или Wow6432Node для 32-бит

Тревожный признак

ProgID отсутствует или ссылается на старый путь

Типичные ошибки и их устранение

Большинство проблем сводится к четырём причинам: нет прав администратора, неверная разрядность, файл перемещён после регистрации, отсутствуют зависимые библиотеки (например, Visual C++ Redistributable нужной версии). Последнюю причину видно по ошибке «модуль не найден» при заведомо существующем файле — regsvr32 имеет в виду не саму DLL, а её зависимость.

Типичные ошибки
01
Регистрация без прав администратора — запись в реестр отклоняется, объект не создаётся
02
32-битная DLL зарегистрирована через System32 вместо SysWOW64 — 1С её не видит
03
Перемещение DLL после регистрации — реестр указывает на несуществующий путь
04
Попытка зарегистрировать Native API компоненту через regsvr32 — она не COM и не регистрируется
05
Отсутствие Visual C++ Redistributable — ошибка «модуль не найден» при наличии файла

Для снятия регистрации используется команда regsvr32 /u "путь\файл.dll" — её нужно выполнить перед удалением или переносом библиотеки. После любых манипуляций перезапускайте клиент 1С: COM-информация кэшируется процессом.

Итог

Что важно запомнить

COM-DLL регистрируют через regsvr32 от имени администратора с учётом разрядности (SysWOW64 для 32-бит на 64-битной ОС), а компоненты Native API подключает сама платформа 1С без записи в реестр. Успех проверяется созданием объекта в коде 1С, а большинство ошибок связано с правами, разрядностью и перемещением файла после регистрации.

Частые вопросы

Можно ли зарегистрировать DLL без прав администратора?

Да, если библиотека поддерживает регистрацию на уровне пользователя: regsvr32 с ключом /n и /i или запись в ветку HKCU вместо HKLM. Но большинство COM-компонент рассчитано на системную регистрацию, поэтому надёжнее запускать командную строку от имени администратора.

Где взять ProgID для подключения из 1С?

ProgID указан в документации поставщика компоненты. Также его можно найти в реестре после регистрации в разделе HKEY_CLASSES_ROOT — ищите запись, связанную с CLSID библиотеки.

regsvr32 пишет «модуль загружен, но точка входа не найдена» — что это значит?

Библиотека не является регистрируемым COM-сервером: в ней нет экспортируемой функции DllRegisterServer. Такая DLL либо подключается иначе (например, как Native API компонента 1С), либо вообще не предназначена для COM-вызова.

Нужно ли регистрировать DLL на каждом рабочем месте?

Да, если COM-объект создаётся на клиенте: регистрация локальна для каждого компьютера. Если объект используется только в серверном коде 1С, достаточно зарегистрировать библиотеку на сервере 1С с учётом его разрядности.

Как удалить регистрацию DLL?

Выполните regsvr32 /u с полным путём к файлу из командной строки от имени администратора. После успешного снятия регистрации файл можно перемещать или удалять, не оставляя в реестре битых ссылок.