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

· 9 мин

Содержание

Чтобы зарегистрировать 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. Точного «паспорта» у файла нет, но есть надёжные приёмы:

  1. Если библиотека ставилась установщиком, 64-битные обычно лежат в C:\Program Files\..., 32-битные — в C:\Program Files (x86)\....
  2. Разрядность можно уточнить у поставщика компоненты — это базовая характеристика.

Разрядность DLL должна совпадать с разрядностью процесса 1С, который её загружает. 32-битную библиотеку 64-битный rphost не подключит никогда.

Перед регистрацией проверьте
Выполнено: 0 / 5

Где лежит нужный 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, поэтому без прав администратора не обойтись.

  1. Нажмите Пуск, наберите cmd, в списке правой кнопкой выберите Запуск от имени администратора. Согласитесь с запросом контроля учётных записей.
  2. Выполните команду с полным путём к библиотеке. Путь — в кавычках, если в нём есть пробелы:
regsvr32 "C:\Components\MyLib.dll"
  1. Для 32-битной DLL на 64-разрядной Windows вызывайте 32-битный regsvr32 явно:
C:\Windows\SysWOW64\regsvr32.exe "C:\Components\MyLib32.dll"
  1. При успехе появится окно «Успешное выполнение 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, работающий под учётной записью службы. У этой учётной записи может не быть прав на запуск и обращение к компоненту.

Как открыть и настроить:

  1. Нажмите Пуск, наберите dcomcnfg, запустите Службы компонентов.
  2. Раскройте Службы компонентов → Компьютеры → Мой компьютер → Настройка DCOM.
  3. Найдите в списке нужный компонент, откройте его свойства правой кнопкой.
  4. На вкладке Безопасность задайте разрешения на запуск и активацию, а также на доступ — добавьте учётную запись, под которой работает процесс 1С.
  5. На вкладке Удостоверение укажите, под какой учётной записью запускается сам 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 не найдена»?
Эта DLL не является COM-сервером — у неё нет функции самрегистрации. Регистрировать её не нужно: либо это вспомогательная библиотека, либо компонента, которую 1С подключает напрямую по пути к файлу.
Где регистрировать библиотеку в клиент-серверной базе?
Там, где её загружает процесс. Для серверного кода (&НаСервере) — на сервере 1С, разрядность должна совпадать с разрядностью rphost. Для клиентского кода — на рабочей станции пользователя.