COM-интеграция dll в 1С

1. VKuser24105185 06.09.18 07:28 Сейчас в теме
Доброго времени суток, прошу помощи у знатоков 1С. У меня есть некая dll(которая проверена и работает корректно) и есть код внешней обработки, который эту dll использует. Проект должен быть рабочий, мне нужно лишь настроить соединение, но в этом я не преуспел, поскольку это мое первое мини-знакомство с 1с. Проблема заключается в том, что при попытке создания COM-объекта возникает ошибка:

Ошибка при вызове конструктора (COMОбъект)
gth = Новый COMОбъект("Library.ComSdk.Service");
по причине:
-2147221164(0x80040154): Class not registered

При повторном нажатии на кнопку и повторном выполнении кода появляется другая ошибка:

Ошибка при вызове конструктора (COMОбъект)
gth = Новый COMОбъект("Library.ComSdk.Service");
по причине:
-2147024894(0x80070002): The system cannot find the file specified.


dll зарегистрирована через regasm. Перепробовал много всего, и comcntr заново регистрировал через regsvr, и пытался компоненту новую создать, ничего не помогает. В интернете много способов решения проблемы, но почему-то ничего не помогло, может кто-то поможет сузить параметры поиска решения. База находится на локальном компьютере, версия 1с 8.3.9.2033. Выполняю я все это так: создал базу, поставил в настройках галочку для запуска приложения с обычными формами, поскольку с управляемыми формами оно не работает, затем жму отладку и открываю обработку. Может где-то в этих действиях я что-то делаю не так.
Найденные решения
10. blackhole321 1305 06.09.18 10:44 Сейчас в теме
(9)У Вас 32-битный клиент, а COM-объекты зарегистрированы как x64.
Вам необходимо:
1. Удалить регистрацию СОМ: ПутьКx64\regasm regasm /u "ПолныйПуть\ИмяВашейDLL.dll"
2. Зарегистрировать COM объект как x32: ПутьКx32\regasm /codebase "ПолныйПутьКДЛЛ\ИмяВашейДЛЛ.dll"
3. Создать COM+ приложение для работы x32 COM объектов в x64 ОС:
Примерно как здесь https://infostart.ru/public/839172/
aleksey2; VKuser24105185; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. blackhole321 1305 06.09.18 08:10 Сейчас в теме
(1)битность системы, на которой выполняется код?
Com объект зарегистрирован как x32 или x64?
При регистрации использовали ключ /codebase?
VKuser24105185; +1 Ответить
3. VKuser24105185 06.09.18 09:30 Сейчас в теме
(2) 64, обычная win 10
x64, поскольку компонент написан на C#, то регистрировал я его через:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe
/codebase не использовал
4. blackhole321 1305 06.09.18 09:32 Сейчас в теме
5. VKuser24105185 06.09.18 09:48 Сейчас в теме
(4) По-моему 64, но я не уверен из-за отсутствия опыта с 1С, я просто установил 1с:Предприятие, создал демо-базу локально, затем я захожу в конфигуратор и запускаю дебаг "Толстый клиент"(видимо 64, раз клиента запускаю здесь же), где уже и открываю внешнюю обработку.
Вообще задача стоит как - запустить внешнюю обработку клиенту, но хоть как-то открыть форму я смог только через запуск "Толстого клиента без управляемых форм", но функционал не работает из-за форм.
6. blackhole321 1305 06.09.18 10:04 Сейчас в теме
(5) Что возвращает КаталогПрограммы()?
VKuser24105185; +1 Ответить
9. VKuser24105185 06.09.18 10:12 Сейчас в теме
(6) C:\Program Files (x86)\1cv8\8.3.9.2033\bin\
10. blackhole321 1305 06.09.18 10:44 Сейчас в теме
(9)У Вас 32-битный клиент, а COM-объекты зарегистрированы как x64.
Вам необходимо:
1. Удалить регистрацию СОМ: ПутьКx64\regasm regasm /u "ПолныйПуть\ИмяВашейDLL.dll"
2. Зарегистрировать COM объект как x32: ПутьКx32\regasm /codebase "ПолныйПутьКДЛЛ\ИмяВашейДЛЛ.dll"
3. Создать COM+ приложение для работы x32 COM объектов в x64 ОС:
Примерно как здесь https://infostart.ru/public/839172/
aleksey2; VKuser24105185; +2 Ответить
11. held88 59 06.09.18 10:55 Сейчас в теме
А если regasm 32 битный взять не взлетит? Или WOW64 так далеко не расстилается?
13. blackhole321 1305 06.09.18 11:26 Сейчас в теме
(11)
А если regasm 32 битный взять не взлетит?

Я собственно и написал о regasm x32 п. 2.
VKuser24105185; +1 Ответить
14. held88 59 06.09.18 11:30 Сейчас в теме
12. held88 59 06.09.18 11:00 Сейчас в теме
(10) Человеку по-моему легче клиент переустановить на 64 битный.
15. VKuser24105185 06.09.18 11:47 Сейчас в теме
(10) Спасибо, ошибка исчезла, теперь нормально подключается, правда появилась "ошибка при вызове метода контекста", но это совсем другая история, хотя бы подключилось, буду дальше ковыряться)
16. VKuser24105185 07.09.18 09:56 Сейчас в теме
(10) Извините за назойливость, но можно у вас еще совета спросить, может быть вы сможете подсказать.
У меня есть один и тот же код, который работает в OneScript, но вылетает в самой 1С при первом же вызове функции СОМ-Объекта. Я сначала предполагал, что проблемы с dll, но проверил в OneScript, и все работает.
Я создал СОМ-объект и при вызове GetSettingService() вылетает: "Ошибка при вызове метода контекста" по причине "Неизвестная ошибка"
pvService = Новый COMОбъект("Library.ComSdk.Service");
pvService.Initialize();
settingService = pvService.GetSettingService();
/* */
7. held88 59 06.09.18 10:05 Сейчас в теме
А вывод команды regasm?
regasm ВашБиблиотек.dll /tlb /codebase

Что пишет?
8. VKuser24105185 06.09.18 10:10 Сейчас в теме
(7) Пишет, что типы зарегистрированы успешно и экспортировано в tlb.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот