Администрирование · 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), потому что после регистрации перемещать или удалять файл нельзя — реестр хранит полный путь.
regsvr32 "C:\Components\MyComponent.dll"После выполнения появится диалог «DllRegisterServer in ... succeeded» — это признак успешной регистрации. Если вместо этого ошибка 0x80070005 — не хватило прав, перезапустите командную строку с повышением. Ошибка 0x80004005 часто означает, что DLL зависит от других библиотек, которых нет в системе, либо файл повреждён.
- 1Скопируйте DLL в постоянную папку без русских букв и пробелов в пути
- 2Откройте командную строку от имени администратора
- 3Выполните regsvr32 с полным путём к DLL (для 32-битной DLL на 64-битной ОС — через SysWOW64)
- 4Дождитесь сообщения об успешной регистрации
- 5Перезапустите клиент 1С и проверьте создание объекта
Разрядность: 32 и 64 бита
Самая частая причина «не работает после регистрации» — несовпадение разрядности. Клиент 1С бывает 32-разрядным и 64-разрядным, и COM-объект он может загрузить только своей разрядности. На 64-разрядной Windows 32-битные DLL регистрируются отдельно — через regsvr32 из папки SysWOW64, а не System32 (названия папок исторически перепутаны: в System32 лежат 64-битные компоненты).
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 не найден в реестре нужной разрядности.
Как проверить результат
DllRegisterServer succeeded
Код ошибки 0x80070005 или 0x80004005
Объект создан, методы вызываются
«Недопустимая строка с указанием класса»
ProgID есть в HKCR или Wow6432Node для 32-бит
ProgID отсутствует или ссылается на старый путь
Типичные ошибки и их устранение
Большинство проблем сводится к четырём причинам: нет прав администратора, неверная разрядность, файл перемещён после регистрации, отсутствуют зависимые библиотеки (например, Visual C++ Redistributable нужной версии). Последнюю причину видно по ошибке «модуль не найден» при заведомо существующем файле — regsvr32 имеет в виду не саму DLL, а её зависимость.
Для снятия регистрации используется команда 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 с полным путём к файлу из командной строки от имени администратора. После успешного снятия регистрации файл можно перемещать или удалять, не оставляя в реестре битых ссылок.