|
Помогите подключиться к внешней компоненте (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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |