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

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 или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует