Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
19 Янв 2019, 21:08
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Использование ДТО в стороннем ПО  (Прочитано 163 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vitto74

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2018-10-15
  • Сайт: 
  • Профессия: Программист 1С
Доброго времени суток.
Появилась задача прицепить к программе на с++/qt драйверы торгового оборудования для 1с8.3. Казалось бы проблем быть не должно т.к. технология внешних компонент 1С документирована очень хорошо, как и требования к драйверам (хотя это совершенно не важно).
С native компонентами проблем не возникло - там все однозначно и прямолинейно.
А вот с COM какой то бардак! Для примера я взял драйверы для ККМ из поставки 1С8.3. Они поставляются в zip архивах в виде dll и файлов manifest.xml и info.xml. Проблема в том, что все библиотеки COM разные! Только одна dll полностью соответствует спецификации! Остальные реализуют расширения языка 1С как попало, но тем не менее, каким то волшебным образом в 1С они все прекрасно работают. Я подозреваю это происходит потому, что 1С это очень древняя платформа и внешние компоненты COM пишут как попало, а 1С вынуждена весь этот зоопарк поддерживать. В принципе реализовать все костыли, применяемые 1С можно без особого труда, но выяснилась очень неприятная вещь - некоторые DLL с COM объектами не содержат в себе манифеста с описание интерфейсов COM.
Например Spark115FComp.dll это компонента, созданная по всем правилам - в ней 4 интерфейса, 3 и которых требует технология. Это единственная COM библиотека, сделанная по стандарту.
Библиотека smDrvFR1CLib20.dll реализует 2 интерфейса - один для ДТО 2.0, а второй для ДТО 2.2. Интерфейсов которые должны быть по технологии нет. В требованиях ДТО это вроде допустимо.
Библиотека IskraKKTLib.dll (AddIn.IskraKKT) вообще за гранью добра и зла! Я не могу сгенерировать TLB для этой компоненты. OleView при попытке создать TLB выпадает с ошибкой. Вот такой код нормально отрабатывает на драйверах для ККТ Штрих и Атол (старые драйверы 8.x)
    CoInitializeEx(nullptr, COINIT_MULTITHREADED);
    ax = new QAxObject("имя_компоненты из INFO.XML");

    ITypeInfo *typeInfo = nullptr;
    IDispatch *dispatch = nullptr;
    ax->queryInterface(IID_IDispatch, reinterpret_cast<void **>(&dispatch));
    if (dispatch){
        dispatch->GetTypeInfo(0, LOCALE_SYSTEM_DEFAULT, &typeInfo);
    }

Для AddIn.IskraKKT и нескольких других, typeInfo остается nullptr. В компоненте просто нет информации ни о доступных интерфейсах ни о доступных методах. Я в тупике. Предположим, что все COM-драйверы возвращают интерфейс по умолчанию, реализующий нужные функции. Тогда как мне вызывать функции этого интерфейса? На сколько я понял dynamicCall использует ITypeInfo для вызова произвольной функции, поэтому использовать его не получится. Значит нужно сгенерировать описание интерфейса. Но как это сделать?
Буду очень благодарен за помощь.
На всякий случай прилагаю dll с драйверами. https://yadi.sk/d/AGhuibb-UbVYpQ


Теги: ДТО COM C++ 
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

alexandr_ll
36 Сообщений
AIFrame AIFrame
32 Сообщений
LexaK
25 Сообщений
MuI_I_Ika MuI_I_Ika
24 Сообщений
alex0402
24 Сообщений
Св Ч Св Ч
22 Сообщений
antoneus
21 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
17 Сообщений
wise wise
15 Сообщений
Кот_Леопольд
15 Сообщений

* Кто онлайн

  • Точка Гостей: 318
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal