Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите подключиться к внешней компоненте (dll/ocx) с COM-интерфейсом

Помогите подключиться к внешней компоненте (dll/ocx) с COM-интерфейсом
Я
   wmonref
 
26.05.18 - 18:13
Здрасьте!

Есть 2 библиотеки (.dll и .ocx) с COM-интерфейсом (просматривал с помощью OLE/COM Object Viewer и у обоих видны интерфейсы и классы.

ЗагрузитьВнешнююКомпоненту("OPOSFiscalPrinter.ocx") и
ЗагрузитьВнешнююКомпоненту("POS.Devices.OPOSFiscalPrinter.dll")

выдают ошибку "Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты"

OPOS = Новый COMОбъект("IOPOSFiscalPrinter") также выдает ошибку "Ошибка при вызове конструктора (COMОбъект): Invalid class string"

Класс IOPOSFiscalPrinter зарегистрирован в системе (OLE/COM Object Viewer его показывает)

Посоветуйте, как подключиться?
Спасибо!
 
 
   drei
 
1 - 26.05.18 - 19:38
Новый ком объект надо создавать с правильным appid с учётом разрядности клиентского приложения и ком сервера
   PloAl
 
2 - 26.05.18 - 19:41
В COM обычно при регистрации (regsrv32...), попадают записи в реестр. В реестре можно по имени файла нагуглить или uid com объекта, или сразу точное имя СОМ объекта.
В вашей ошибке ругается на "IOPOSFiscalPrinter", оно скорее всего должно быть вида "IOPOSFiscalPrinter.*" где вместо * какое еще имя.
   Cool_Profi
 
3 - 26.05.18 - 20:05
Разрядность (32-64) можно глянуть
   wmonref
 
4 - 26.05.18 - 21:07
(2) Вроде нашел... Пока что спасибо!
   wmonref
 
5 - 26.05.18 - 21:39
(2) Я так понимаю имя СОМ объекта написано в ключе VersionIndependentProgID , да?
   wmonref
 
6 - 27.05.18 - 11:13
Итак, для того чтобы узнать имя СОМОбъекта для 1С идем в MS Excel (версии 2007 и выше) в панели "Разработчик" -> "Надстройки Excel" -> "Автоматизация" находим в списке название нужной компоненты, выделяем - и внизу ProgID и есть наше имя СОМОбъекта.

Метод с регистром тяжелый (надо много искать и не всегда понятно что и как).
   Сияющий в темноте
 
7 - 27.05.18 - 12:48
Нельзя путать ActiveX и внешнюю компоненту.
ActiveX это Com сервер,который работает с любым Com клиентом.
Создавать через новый ComОбъект а данные искать в реестре.
Dll регистрируется в ключ InprocServer32 какого то класса,и там же можно узнать ProgId
   Otark
 
8 - 27.05.18 - 13:27
>>Dll регистрируется в ключ InprocServer32 какого то класса,и там же можно узнать ProgId
(7)секундочку где можно узнать ProgId?
тут как бы такая ситуация: OLE imagemagick -2147221164(0x80040154): Класс не зарегистрирован
   lEvGl
 
9 - 27.05.18 - 14:09
ну если библиотека такая славная и все в ней видно, то можно ее подключить к VS например и посмотреть ProgId да и вобще что там да как
   lEvGl
 
10 - 27.05.18 - 14:10
вот когда нихрена не видно тогда другой разговор, вернее его нет совсем, не о чем
 
 Рекламное место пустует
   Сияющий в темноте
 
11 - 28.05.18 - 09:11
Не забываем,что реестр для 32 битных и 64 битных com серверов существует независимо.Соответсвенно,если сервер 64 бита,то и запускать его нужно с клиента 1с в 64 и наоборот.
Если проверять через VbScript,то на 64 битной машине стандартно стартует 64 битный сценарий,а 32 битный запускается из папки SysWow64

Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует