Имя: Пароль:
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
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший