Как подключить и зарегистрировать библиотеку DLL для работы в 1С
Содержание
Чтобы зарегистрировать COM-библиотеку DLL для 1С 8.3, запустите командную строку от имени администратора и выполните regsvr32 "C:\путь\library.dll". Главное условие — разрядность DLL должна совпадать с разрядностью процесса, который её загрузит: 32-битную библиотеку регистрируют 32-битным regsvr32 из папки SysWOW64, 64-битную — из System32. Промах по разрядности даёт ошибку «модуль несовместим», и никакие права тут не помогут.
Сразу уточню частое заблуждение. regsvr32 подходит не для любой DLL, а только для COM-сервера — библиотеки, которая экспортирует функцию DllRegisterServer. Если это обычная вспомогательная библиотека (например, часть внешней компоненты по технологии Native API), регистрировать её через regsvr32 не нужно и не получится — 1С подключит её напрямую по пути к файлу.
Ниже разберу оба случая: когда библиотеку действительно надо регистрировать в реестре, а когда достаточно положить файл рядом и вызвать из кода.
Что регистрируется, а что подключается напрямую
Разделите библиотеки по способу использования — от этого зависит весь дальнейший порядок действий.
- 🔌 COM-объект (ActiveX, COM-сервер). Экспортирует
DllRegisterServer, пишет сведения о себе в реестр Windows. Из 1С вызывается черезНовый COMОбъект("ProgID")или как внешняя компонента типаCOM. Такую DLL нужно регистрировать черезregsvr32. - 📦 Внешняя компонента Native API. Современный способ для 1С 8.3. Поставляется файлом
.dllили архивом.zipс манифестом. В реестр не пишется, подключается методомПодключитьВнешнююКомпонентупо пути к файлу или по макету.regsvr32для неё не применяется. - 🧩 Зависимая библиотека. Не COM-сервер сама по себе, просто нужна другой DLL для работы (например, библиотеки Visual C++ Runtime). Её не регистрируют — её устанавливают распространяемым пакетом или кладут рядом с основным файлом.
Если не уверены, какой у вас тип — попробуйте зарегистрировать. Ошибка «точка входа DllRegisterServer не найдена» означает, что перед вами не COM-сервер, а значит регистрация не требуется.
Поставщик компоненты обычно пишет в документации, нужна ли регистрация. Для разработок под 1С 8.3 почти всегда используется Native API — его подключают из кода без regsvr32.
Проверка разрядности платформы 1С и самой библиотеки
Это шаг, на котором спотыкается большинство. COM-объект загружается внутрь процесса 1С, а процесс не может загрузить DLL другой разрядности.
Сначала определите, какой процесс будет работать с библиотекой:
- Толстый или тонкий клиент (
1cv8.exe,1cv8c.exe) — компоненту грузит клиентский процесс на рабочей станции. - Клиент-серверный вариант — если вызов идёт в серверном контексте (
&НаСервере), библиотеку грузит рабочий процессrphost.exeна сервере 1С. Разрядность определяет именно сервер, а не рабочее место пользователя.
Посмотреть разрядность установленной платформы можно в окне О программе (Справка → О программе) — там указано, 32- или 64-разрядный клиент. Разрядность сервера совпадает с тем, какой дистрибутив установлен как служба.
Теперь разрядность DLL. Точного «паспорта» у файла нет, но есть надёжные приёмы:
- Если библиотека ставилась установщиком, 64-битные обычно лежат в
C:\Program Files\..., 32-битные — вC:\Program Files (x86)\.... - Разрядность можно уточнить у поставщика компоненты — это базовая характеристика.
Разрядность DLL должна совпадать с разрядностью процесса 1С, который её загружает. 32-битную библиотеку 64-битный rphost не подключит никогда.
Где лежит нужный regsvr32 в Windows
На 64-разрядной Windows есть две копии regsvr32.exe, и выбор между ними критичен.
| Разрядность DLL | Какой regsvr32 запускать | Путь |
|---|---|---|
| 64-битная | 64-разрядный | C:\Windows\System32\regsvr32.exe |
| 32-битная | 32-разрядный | C:\Windows\SysWOW64\regsvr32.exe |
Имена папок устроены непривычно: в System32 лежат 64-битные компоненты, а 32-битные — в SysWOW64. Это не опечатка, так исторически сложилось в Windows.
Если просто набрать regsvr32 без пути, система подставит версию из System32 (64-битную). Для 32-битной библиотеки это приведёт к ошибке несовместимости — указывайте полный путь к нужному файлу.
На 32-разрядной Windows копия одна — в System32, и вопрос выбора не стоит.
Пошаговая регистрация COM-библиотеки через regsvr32
Запись в реестр затрагивает разделы HKEY_CLASSES_ROOT и HKEY_LOCAL_MACHINE, поэтому без прав администратора не обойтись.
- Нажмите Пуск, наберите
cmd, в списке правой кнопкой выберите Запуск от имени администратора. Согласитесь с запросом контроля учётных записей. - Выполните команду с полным путём к библиотеке. Путь — в кавычках, если в нём есть пробелы:
regsvr32 "C:\Components\MyLib.dll"
- Для 32-битной DLL на 64-разрядной Windows вызывайте 32-битный
regsvr32явно:
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyLib32.dll"
- При успехе появится окно «Успешное выполнение
DllRegisterServerв …». Нажмите ОК.
Полезные ключи команды:
/u— отменить регистрацию (снять COM-объект с учёта):regsvr32 /u "C:\Components\MyLib.dll". Используйте перед удалением или заменой библиотеки./s— тихий режим без окон, удобно для установочных скриптов:regsvr32 /s "C:\Components\MyLib.dll".
В тихом режиме окон нет, но результат можно поймать по коду возврата процесса: 0 — успех, ненулевое значение — ошибка. В пакетном файле это выглядит так:
regsvr32 /s "C:\Components\MyLib.dll"
if %errorlevel% neq 0 echo Регистрация не удалась, код %errorlevel%
Так установочный скрипт не «проглотит» молча сбой регистрации.
Файл DLL должен остаться на своём месте после регистрации. В реестр пишется путь к нему — если потом перенести или удалить файл, COM-объект перестанет подключаться, хотя запись в реестре останется.
Если библиотеку использует серверный процесс в клиент-серверной базе, регистрацию выполняют на сервере 1С, а не на рабочей станции пользователя.
Разбор ошибок при регистрации
Текст ошибки regsvr32 почти всегда прямо указывает причину. Разберём частые случаи.
Отдельно про зависимости: COM-библиотека может сама ссылаться на другие DLL. Если их нет в системе, regsvr32 отчитается об ошибке загрузки модуля, хотя путь к основному файлу верный. Проверить список зависимостей помогает утилита Dependencies (современная замена Dependency Walker) — она покажет, какой именно сопутствующей библиотеки не хватает.
Настройка прав доступа DCOM
Этот шаг нужен не всегда. Для внутрипроцессных COM-объектов (DLL загружается прямо в процесс 1С) настройка DCOM не требуется — хватает регистрации. DCOM настраивают, когда COM-сервер работает отдельным процессом (.exe или компонент, запускаемый вне процесса-клиента) и 1С обращается к нему по технологии DCOM.
Типичная ситуация — клиент-серверная база, где к COM-объекту обращается rphost, работающий под учётной записью службы. У этой учётной записи может не быть прав на запуск и обращение к компоненту.
Как открыть и настроить:
- Нажмите Пуск, наберите
dcomcnfg, запустите Службы компонентов. - Раскройте
Службы компонентов → Компьютеры → Мой компьютер → Настройка DCOM. - Найдите в списке нужный компонент, откройте его свойства правой кнопкой.
- На вкладке Безопасность задайте разрешения на запуск и активацию, а также на доступ — добавьте учётную запись, под которой работает процесс 1С.
- На вкладке Удостоверение укажите, под какой учётной записью запускается сам COM-сервер.
Права DCOM затрагивают всю систему. Меняйте только разрешения нужного компонента и не выдавайте запуск «всем» — это дыра в безопасности. Если машина в домене, согласуйте изменения с администратором.
Изменения прав DCOM вступают в силу для новых запусков компонента. Если COM-сервер уже был запущен или 1С обращалась к нему в текущих сеансах, новые разрешения применятся при следующем обращении. Перезапускать службу агента сервера 1С ради этого обычно не нужно.
Если всё же требуется перезапуск службы сервера 1С (1C:Enterprise Server), помните: это оборвёт все активные сеансы пользователей и прервёт фоновые задания. Делайте это только в согласованное технологическое окно, а не в рабочее время.
Если COM-объект работает только локально в клиентском процессе 1С, этот раздел можно пропустить целиком.
Проверка подключения из конфигуратора 1С
После регистрации убедитесь, что 1С видит компонент. Проверять лучше там же, где библиотека будет использоваться: в клиентском или серверном контексте.
Для COM-объекта простейшая проверка — создание экземпляра. В консоли кода или обработке выполните:
Попытка
Объект = Новый COMОбъект("ProgID.Класс");
Сообщить("COM-объект подключён");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
ProgID берётся из документации к компоненту — это строковый идентификатор, под которым объект записан в реестре. Если регистрация прошла, строка «COM-объект подключён» появится без исключения.
Если ProgID в документации не указан, его можно найти в реестре. Откройте редактор реестра (regedit) и посмотрите раздел HKEY_CLASSES_ROOT — после удачной регистрации там появляется ветка с именем-идентификатором компонента. Удобнее смотреть не весь HKEY_CLASSES_ROOT, а подраздел CLSID, где каждому COM-классу соответствует запись с путём к зарегистрированной DLL в ключе InprocServer32 — заодно убедитесь, что путь ведёт именно к вашему файлу.
Такая проверка через реестр отвечает сразу на два вопроса: прописался ли объект и не остался ли в записи старый путь после переноса файла.
Для внешней компоненты по технологии COM подключение выглядит так:
Подключено = ПодключитьВнешнююКомпоненту("ProgID.Класс", "МояКомпонента", ТипВнешнейКомпоненты.COM);
Если Подключено Тогда
Объект = Новый("AddIn.МояКомпонента.Класс");
КонецЕсли;
Для компоненты Native API регистрация в реестре вообще не участвует — подключение идёт по пути к файлу или по макету конфигурации:
Подключено = ПодключитьВнешнююКомпоненту("C:\Components\MyAddIn.dll", "МояКомпонента", ТипВнешнейКомпоненты.Native);
Если проверка в клиентском контексте проходит, а в серверном (&НаСервере) — нет, причина почти всегда в том, что на сервере 1С библиотека не зарегистрирована, либо её разрядность не совпадает с разрядностью rphost.
Частые ошибки и как их избежать
Короткий список промахов, которые повторяются чаще всего — отдельно от текстов ошибок выше.
- ❌ Регистрируют на своём компьютере, а база клиент-серверная. Серверный код грузит компонент на сервере 1С. Регистрируйте там.
- ❌ Путают разрядность. 32-битный COM-объект пытаются подключить к 64-битному процессу. Приведите разрядности в соответствие ещё до регистрации.
- ❌ Переносят DLL после регистрации. В реестре остаётся старый путь. После перемещения файла перерегистрируйте библиотеку заново.
- ❌ Забывают про зависимости. Компонента требует runtime (например, Visual C++), а его нет. Доустановите пакет нужной разрядности.
- ❌ Пытаются регистрировать Native-компоненту. Для 1С 8.3 это основной формат, и
regsvr32для него не нужен — подключайте из кода.
Чем regsvr32 отличается от подключения внешней компоненты в 1С?
regsvr32 записывает COM-сервер в реестр Windows — это нужно для объектов, создаваемых через Новый COMОбъект. Внешние компоненты Native API в реестр не пишутся и подключаются методом ПодключитьВнешнююКомпоненту по пути к файлу. Это два разных механизма.Нужны ли права администратора для regsvr32?
0x80070005.Можно ли отменить регистрацию библиотеки?
/u: regsvr32 /u "путь\library.dll". Это снимает COM-объект с учёта в реестре — делайте так перед удалением или заменой DLL на новую версию.Почему regsvr32 пишет «точка входа DllRegisterServer не найдена»?
Где регистрировать библиотеку в клиент-серверной базе?
&НаСервере) — на сервере 1С, разрядность должна совпадать с разрядностью rphost. Для клиентского кода — на рабочей станции пользователя.