8.х Регистрация dll

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Max1mus, 26 ноя 2018.

  1. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Добрый день, уважаемые коллеги.
    Очень надеюсь на Вашу помощь, снова...

    Имеется MesProWrp.dll. Она нужна для подписи XML-запроса цифровой подписью.
    Не знаю какая у нее архитектура, где она создавалась, но именно через её методы/функции мне надо обратиться. Методы более менее описаны в документации к ней, но примеров как подключить её в 1С нет и наверно не будет. Разработчики не могут помочь.
    А самому мне не удается её подключить, пробовал разными способами. Предварительно зарегистрировал её через regsvr32 - успешно. В реестре нашел её ProgID. Но всё равно не подключается она в 1С.

    Как я делал:
    Результат = ПодключитьВнешнююКомпоненту(ПрогИД, "MesProWrp", ТипВнешнейКомпоненты.COM);
    Результат = ПодключитьВнешнююКомпоненту("C:\Program Files (x86)\1cv8\common\MesProWrp.dll", "MesProWrp", ТипВнешнейКомпоненты.COM);
    Результат = ПодключитьВнешнююКомпоненту("MesProWrp.dll", "MesProWrp", ТипВнешнейКомпоненты.COM);
    Результат = ПодключитьВнешнююКомпоненту("C:\Windows\System32\MesProWrp.dll", "MesProWrp", ТипВнешнейКомпоненты.COM);
    Результат = Неопределено
    Если просто пытаться создать объект по ProgID ОбъектКомпоненты = Новый("MesProWrp.ContactCryptor"); Возвращается Тип не определен (MesProWrp.ContactCryptor)

    Может надо как-то её поместить в ОбщийМакет с двоичными данными, а потом сработает УстановитьВнешнююКомпоненту? Если да, подскажите как. Не приходилось с таким сталкиваться раньше...

    Пробовал напрямую по ProgID через Новый("AddIn.MesProWrp.ContactCryptor") : Тип не определен (MesProWrp.ContactCryptor)

    И вот так:
    Новый COMОбъект("MesProWrp.ContactCryptor") {(1)}: Ошибка при вызове конструктора (COMОбъект)

    Вот описание Dll в документации:
    Система распространяет библиотеку MesProWrp.dll, реализующую интерфейс
    IContactCryptor. Для создания электронно-цифровой подписи с помощью библиотеки
    MesProWrp следует вызвать метод Sign интерфейса IContactCryptor. Подготовив запрос к серверу, вызывайте функцию PrepareRequest интерфейса ICryptor, либо экспортируемую библиотекой MesProWrp функцию PrepareRequest.

    Кто чем может, прошу, помогите.
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    343
    Баллы:
    104
    ПодключитьВнешнююКомпоненту не поможет. Библиотека же не разрабатывалась для 1С.

    Если она реально регистрируется в системе, поддерживает COM - то твой единственный возможный путь через Новый COMОбъект(), и уже у созданного ком объекта вызвать метод Sign.
    Уточняй название класса и пробуй создавать. Если не создается то причины например неправильное название класса или проверяй место где вызываешь и где оно у тебя зарегистрировано (клиент/сервер) ну или самая беда с несоответствием разрядности клиента 1с/компоненты dll/ОС.
    Чтобы уточнить название класса напиши разработчикам только не пиши им про 1С, тебя фиг поймут, а попроси простой пример на чем нибудь распространенном, например как сделать что-нибудь на vbs. Там и увидишь название класса (в CreateObject()).
  3. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Спасибо за ответ.

    Я предполагал что не разрабатывалась, но не знал как проверить, а ты как узнал? Или предположил просто, опираясь на опыт? Без обид, просто интересно))

    А название класса это не то, что записывается в реестре по GUID dll-ки? Это не тот ProgID, что я там нарыл? Просто по нему не создается COMобъект(
  4. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    При попытке ОбъектКомпоненты = Новый COMОбъект("MesProWrp.ContactCryptor"); //ошибка -2147221164(0x80040154): Класс не зарегистрирован
    Для остальных вариантов типа ОбъектКомпоненты = Новый COMОбъект("ContactCryptor"); //ошибка -2147221005(0x800401F3): Недопустимая строка с указанием класса

    Жду ответа от разработчиков....
  5. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Пока вручную в службах компонентов не прописал эту dll, объект не создавался. Теперь создается
    ОбъектКомпоненты = Новый COMОбъект("MesProWrp.ContactCryptor")
    но методы видны на его интерфейсе iContactCryptor. Кто знает Как теперь к интерфейсу обратиться? Гугл учит интерфейс 1С менять, вместо этого((
  6. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Блин, может я вообще не в ту степь копаю((( Я на это убил больше недели, от разработчиков мало чего добьешься, на Вас надеюсь.
    Есть XML-запрос (требования к нему описаны, тут проблем нет)
    Необходимо сгенерировать подпись библиотекой MesProWrp, используя метод Sign
    Подписанный XML-запрос необходимо передавать в тэге SIGNATURES.
    Сжатый по алгоритму ZLIB XML-запрос необходимо закодировать используя библиотеку base64 и передавать в тэг DATA. И потом документ транспортного уровня, POST передать на сервер, адрес которого дали. Ответ от него будет в таком же виде, который надо будет расшифровать/декодировать и т.д.
    Буду рад любой помощи...
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    343
    Баллы:
    104
    Да нормально все там создается после регистрации.
    upload_2018-11-29_21-8-5.png

    И методы видны:
    upload_2018-11-29_21-5-41.png

    upload_2018-11-29_21-6-13.png

    Ну что туда пихать, и вообще получится ли из 1С впихнуть - я хз. Честно - даже думать не хочу. Ну из под 8.3 может и получится там всякие разные буферы-потоки-работу таки реализовали, может полезно будет (а может и нет).
    В общем если тебе скинут рабочий пример на vbs тебе легче будет.

    Конфигурация то типовая? В типовых же реализованы средства работы с электронной подписью, возможно легче разобраться как из типовой подписать твой текст, чем городить огород из самописки. Какая разница чем подписывать если гост актуальный поддерживает.
    --- Объединение сообщений, 29 ноя 2018 ---
    Ну можешь опытом назвать конечно.. ) Но почему ты решил что разработчик чего-бы то ни было будет ориентироваться на 1С и создавать свою длл по технологии внешних компонент для 1С? Кому это надо?
  8. TopicStarter Overlay
    Max1mus
    Offline

    Max1mus Опытный в 1С

    Регистрация:
    7 апр 2017
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    26
    Спасибо. Уже и сам достучался до этого, думал отписать по факту, когда результаты поболее будут... Ну а пока любая функция возвращает код ошибки 467, хз что это значит...

    Конфа то типовая БП КОРП 3.0 со свежим релизом и 12й платформой, но я че-то не могу найти где это реализовано, чтобы подсмотреть. Кто может пнуть меня в нужном направлении?o_O
    И еще вопрос: где-то читал что 1С пользуется сжатием по методу zLib, но я так понял, что для загрузки/выгрузки базы. В методичке то ли плохо искал, то ли нет такой информации, но может есть какие-то методы реализовать это? Уж как неохота опять стороннюю dll для это загружать...:( Кто-нибудь в курсе?
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    343
    Баллы:
    104
    Сами функции где-то в районе ЭлектроннаяЦифроваяПодписьКлиент. Например СформироватьДанныеПодписи(). Там обвязочных много и заморочено - типа предварительно получить нужный сертификат.

    Я бы этой частью пока вообще не парился. Пробуй для начала не сжатое передавать в base64.

Поделиться этой страницей