При переносе баз данных 1С:Предприятие 7.7 на современные 64-битные операционные системы (Windows Server 2008, 2012, Windows 7, 10, 11 x64) разработчики и администраторы часто сталкиваются с проблемой: внешние компоненты и COM-библиотеки (например, VTools.dll, FormEx.dll, RiK_SQL.dll) отказываются регистрироваться стандартным способом либо выдают ошибки при создании объектов через метод СоздатьОбъект().
Платформа 1С 7.7 является исключительно 32-битным приложением, и все используемые ею внешние библиотеки также скомпилированы под 32-разрядную архитектуру (x86). Разберем причины возникновения ошибок и рассмотрим рабочие способы регистрации и подключения библиотек в среде x64.
Прежде чем переходить к настройке, проанализируем, как операционная система обрабатывает 32-битные библиотеки и чем отличаются разные внешние компоненты:
regsvr32.exe, расположенная в каталоге C:\Windows\System32, предназначена исключительно для 64-битных DLL. Попытка зарегистрировать ею 32-битную библиотеку приведет к ошибке несовместимости модуля. Для 32-битных библиотек необходимо использовать утилиту из папки C:\Windows\SysWOW64.FormEx.dll регистрировать в реестре через regsvr32 не требуется. Она загружается штатным механизмом 1С с помощью функции ЗагрузитьВнешнююКомпоненту() или автоматически при размещении в каталоге базы данных / каталоге платформы.GRID из VTools.dll), требуют либо явной регистрации в реестре Windows, либо применения специализированных загрузчиков в памяти.Если библиотека требует обязательной системной COM-регистрации, выполним ее через корректную 32-битную версию утилиты regsvr32. Разберем процедуру по шагам:
SysWOW64 и полный путь к DLL:
C:\Windows\SysWOW64\regsvr32.exe "C:\Bases\1Cv77\Library\VTools.dll"
После успешного выполнения появится диалоговое окно с подтверждением: DllRegisterServer в C:\...\VTools.dll завершено успешно. После этого в коде 1С можно инициализировать объект обычным способом:
Таблица = СоздатьОбъект("GRID");
В случаях, когда прямая регистрация в реестре нежелательна (например, в терминальных фермах или при отсутствии прав администратора у пользователей), можно использовать утилиту ЗагрузчикВК (vkloader.dll). Этот механизм загружает внешние компоненты в адресное пространство процесса 1С динамически, связывая их по программному идентификатору (ProgID) и GUID класса (CLSID).
Рассмотрим пример программной инициализации библиотеки VTools.dll и создания объекта GRID:
ЗагрузитьВнешнююКомпоненту("vkloader.dll");
Загрузчик = СоздатьОбъект("ЗагрузчикВК");
// Регистрируем библиотеку в памяти с указанием ProgID и CLSID
Результат = Загрузчик.ЗагрузитьВК(КаталогИБ() + "Library\Components\VTools.dll", "Addin.VTools=04024c33-1111-11d1-a486-004095e1daea");
Если Результат = 1 Тогда
Таблица = СоздатьОбъект("GRID");
Сообщить("Объект успешно создан: " + ТипЗначенияСтр(Таблица));
Иначе
Сообщить("Ошибка динамической загрузки компоненты!", "!");
КонецЕсли;
Аналогичным образом через ЗагрузчикВК можно загружать и другие внешние компоненты, указав их идентификаторы, например для RiK_SQL.dll:
Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК(КаталогВнешнихКомпонент + "RiK_SQL.dll", "Addin.R_SQL=65477975-df6f-44cc-a82c-f35f8b5b02e8");
При использовании vkloader.dll при выходе из программы может возникать ошибка в журнале событий Windows (Event ID 1000) с указанием сбойного модуля vkloader.dll_unloaded. Это происходит из-за нарушения порядка выгрузки библиотек из памяти: vkloader выгружается раньше, чем освобождаются ссылки на созданные им COM-объекты или закрываются экранные формы.
Для предотвращения этой ошибки применим следующие рекомендации:
ПриЗавершенииРаботыСистемы() необходимо явно очистить все глобальные переменные, содержащие объекты внешних компонент:
Процедура ПриЗавершенииРаботыСистемы()
// Очищаем ссылки на объекты внешних компонент
Таблица = 0;
Загрузчик = 0;
КонецПроцедуры
GRID), были корректно закрыты до вызова команды закрытия основного окна 1С.Если после выполнения указанных действий библиотеки по-прежнему не инициализируются, проверим системное окружение Windows Server:
1cv7.exe (или 1cv7s.exe) в список исключений DEP либо переведем режим работы службы в положение «Включать DEP только для основных программ и служб Windows».mfc42.dll, msvcrt.dll, msvcp60.dll в каталоге SysWOW64).BIN).