Имя: Пароль:
1C
1С v8
Помогите подключиться к внешней компоненте (dll/ocx) с COM-интерфейсом
0 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 его показывает)

Посоветуйте, как подключиться?
Спасибо!
1 drei
 
26.05.18
19:38
Новый ком объект надо создавать с правильным appid с учётом разрядности клиентского приложения и ком сервера
2 PloAl
 
26.05.18
19:41
В COM обычно при регистрации (regsrv32...), попадают записи в реестр. В реестре можно по имени файла нагуглить или uid com объекта, или сразу точное имя СОМ объекта.
В вашей ошибке ругается на "IOPOSFiscalPrinter", оно скорее всего должно быть вида "IOPOSFiscalPrinter.*" где вместо * какое еще имя.
3 Cool_Profi
 
26.05.18
20:05
Разрядность (32-64) можно глянуть
4 wmonref
 
26.05.18
21:07
(2) Вроде нашел... Пока что спасибо!
5 wmonref
 
26.05.18
21:39
(2) Я так понимаю имя СОМ объекта написано в ключе VersionIndependentProgID , да?
6 wmonref
 
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
8 Otark
 
27.05.18
13:27
>>Dll регистрируется в ключ InprocServer32 какого то класса,и там же можно узнать ProgId
(7)секундочку где можно узнать ProgId?
тут как бы такая ситуация: OLE imagemagick -2147221164(0x80040154): Класс не зарегистрирован
9 lEvGl
 
гуру
27.05.18
14:09
ну если библиотека такая славная и все в ней видно, то можно ее подключить к VS например и посмотреть ProgId да и вобще что там да как
10 lEvGl
 
гуру
27.05.18
14:10
вот когда нихрена не видно тогда другой разговор, вернее его нет совсем, не о чем
11 Сияющий в темноте
 
28.05.18
09:11
Не забываем,что реестр для 32 битных и 64 битных com серверов существует независимо.Соответсвенно,если сервер 64 бита,то и запускать его нужно с клиента 1с в 64 и наоборот.
Если проверять через VbScript,то на 64 битной машине стандартно стартует 64 битный сценарий,а 32 битный запускается из папки SysWow64