shachneff / BROM-Asterisk-Native

Открытая, работающая в 1С >= 8.3.6 версия компоненты ROM-Asterisk-Native от Simplit
38 stars 35 forks source link

Скомпилированная dll #3

Closed SimolSem closed 4 years ago

SimolSem commented 7 years ago

Добрый день! А можно попросить положить и скомпилированную DLL? Попросил товарища скомпилировать (он и писал предыдущее ижью про заголовки) он скомпилил, кодировка не 1251 в dll и свойства с методами - крякозяблы. А при вызове методов латинской 1С возвращает ошибку при вызове метода "Подключиться" причем написано кракозяблами, хотя я вызывал "Connect". Получается dll сопоставило Connect=Подключиться но что-то скомпилилось не так и не работает. (старая dll на 8.2 рабтает с этим экземпляром астериска)

Sancho-R commented 7 years ago

Добрый день. Присоединяюсь к просьбе о готовой dll. Ночью обновили платформу с 8.3.5 на 8.3.9 и компонента от Simplit перестала работать. Срочно ищем замену. Пытались сами скачать Visual Studio и скомпилировать, но пока все безуспешно.

shachneff commented 7 years ago

Я пока не понимаю, почему пересохранение файла-исходника в кодировку Windows-1251 дает правильный результат (свойства ВК отображаются в правильной кодировке), ведь платформа 1С вроде бы как на UTF-8. Плюс в этой кодировке исходник на гитхабе весь в кракозяблах. BROM-Asterisk-Native.zip

shachneff commented 7 years ago

Сразу скажу, что проект я давно забросил, и как он сейчас работает - проверить не имею возможности.

Sancho-R commented 7 years ago

image Никак не могу зарегистрировать ее. И через regsvr32 и через методы самой 1С.

shachneff commented 7 years ago

Это Native-компонента, ее не надо регистрировать в системе. См. метод глобального контекста УстановитьВнешнююКомпоненту()

Для тестов можно сделать короче:

Попытка Результат = ПодключитьВнешнююКомпоненту("D:\BROM-Asterisk-Native.dll", "Test", ТипВнешнейКомпоненты.Native);

Если Результат Тогда ОбъектКомпоненты = Новый("AddIn.Test.ROM-Asterisk-Native"); ОбъектКомпоненты.Подключиться("127.0.0.1"); КонецЕсли; Исключение Сообщить("Исключение при инициализации"); КонецПопытки;

Sancho-R commented 7 years ago

Этот метод я использовал в первую очередь. image dll вместе с xml манифеста закинул в zip, и добавил его в общий макет как двоичные данные.

shachneff commented 7 years ago

Ну, если вот прямо сейчас у меня она подключается, а у Вас нет, значит ей нужны какие-то сишные библиотеки, которых у Вас нет. Дело в том, что некоторое время назад был пулл-реквест от другого разработчика, и я его принял. Там появилось несколько методов, связанных с лицензированием и демо-режимом (которых у меня не было и не будет). Возможно, разработчик использовал какие-то зависимости.

У меня нет сейчас возможности это проверить.

Предлагаю поставить MS VC++ 2015 и скомпилировать самому. Единственное, нужно будет переконвертировать файл AddInNative.cpp в кодировку Windows1251 (опять же, ХЗ почему, у меня было все нормально и без этого).

shachneff commented 7 years ago

Открыть файл AddInNative.cpp в VS 2015, затем Файл - Дополнительные параметры сохранения. Выбрать кодировку Кириллица (Windows) - Кодовая страница 1251. Нажать ОК. Пересобрать проект.

Кракозяблы в 1С исчезнут.

Sancho-R commented 7 years ago

Хорошо, попробуем. Спасибо!

SimolSem commented 7 years ago

@Sancho-R Можешь дать контакт? мне тоже надо это решить, может что и придумаем. У меня пока на Подключить: Ошибка при вызове метода контекста (Подключиться): Ошибка вызова метода внешней компоненты

shachneff commented 7 years ago

У меня нет сейчас компьютера, я с планшета по RDP - это неудобно. У меня нет времени этим заниматься. Код надо проверить после патча от другого программиста - я за ним НЕ проверял. У меня нет астериска под рукой.

SimolSem commented 7 years ago

@shachneff да, спасибо. То я написал @Sancho-R Будем пробовать запустить.

Sancho-R commented 7 years ago

@SimolSem открыл в профиле свою почту, можно написать туда. Кстати, у нас получилось установить компоненту на компьютерах с Win 7, а на сервере с Win 2008 R2 и на компах с Win 8 выходит ошибка установки, как на моем втором скриншоте. Там, где установилось, тоже попадаем на ошибку: "Ошибка при вызове метода контекста (Подключиться): Ошибка вызова метода внешней компоненты".

shachneff commented 7 years ago

Писалась и собиралась на Win10. Вот прямо сейчас делаю так и никакой ошибки нет.

Попытка Результат = ПодключитьВнешнююКомпоненту("D:\BROM-Asterisk-Native.dll", "Test", ТипВнешнейКомпоненты.Native);

Если Результат Тогда ОбъектКомпоненты = Новый("AddIn.Test.ROM-Asterisk-Native"); ОбъектКомпоненты.Подключиться("127.0.0.1"); КонецЕсли; Исключение Сообщить("Исключение при инициализации"); КонецПопытки;

SimolSem commented 7 years ago

Да, если у Подключиться не указать порт, то ошибки нет Но у компоненты свойство Подключено все равно ложь Буду думать дальше.....

shachneff commented 7 years ago

Она простая как валенок! Я хочу, но не могу сейчас ей заняться! Там дел на 30 минут, зная С++ и имея * для отладки

SimolSem commented 7 years ago

я ставил себе позавчера студию и поломалась винда :)

SimolSem commented 7 years ago

Ага, там похоже все параметры должны быть сроковые, а не числовые как в оригинале Уже подключилась, иду дальше

SimolSem commented 7 years ago

РежимПрослушивания надо булево передать, а было число В конце выложу обработку 1С, когда запущу

SimolSem commented 7 years ago

Обработка https://cloud.mail.ru/public/7XiR/HSJ7X5UwL

Спасибо большое!!

shachneff commented 7 years ago

Подстроился под косячную компоненту? Может исправим компоненту? :)

SimolSem commented 7 years ago

Получается надо порт в Подключить принимать число/строка и РежимПрослушивания число/булево чтобы наверняка, но я не силен в С++

shachneff commented 7 years ago

Исправлю на днях, спасибо за найденный баг. Пишите еще.

SimolSem commented 7 years ago

Завтра буду разбирать УстановитьРегулярноеВыражение не работает "Newchannel.{1,}|Bridge.{1,}"

korv1982 commented 7 years ago

Вопросы по запуску и подключению компоненты можно задать мне. Все последние правки вносил я. Сильно ногами не пинать. На этой компоненте я учился писать на с++. Куда выложить готовый ДТ для 1С?

korv1982 commented 7 years ago

Свойство Описание Подключено Принимает «1» если подключено, «0»: если нет (Булево, нельзя установить из 1С) РежимПрослушивания Устанавливает для компоненты режим отсылки внешних событий в 1С (Булево, можно установить из 1С) РегулярноеВыражение Регулярное выражение Стандартной библиотеки C++. (Не забываем про экранирование символов.Привет С++) Версия Текущая версия компоненты. (Последняя версия всегда будет доступна на сайте или по запросу.) ОшибкаКакСобытие На данном этапе развития компоненты не задействовано. ДемонстрационныйРежим Признак работы компоненты в ДЕМО-Режиме (Булево, нельзя установить из 1С 🙂 )

korv1982 commented 7 years ago

Метод Описание Подключиться(АдресСервера, ПортСервера) Дает команду на подключение компоненты к серверу Asterisk. Имеет два параметра(АдресСервера(Строка), ПортСервера(Строка)) Отключиться() Дает команду на отключение от сервера Asterisk ВыполнитьКоманду(СтрокаКоманды) Дает команду на передачу команды серверу Asterisk. Тавтология какая-то. 🙂 Отправляет указанный текст в AMI и уже компонента ждет результата. А 1С продолжает работать. Результат будет выведен как внешнее событие. Асинхронный запрос. РежимПрослушивания(Режим) Устанавливает режим отсылки внешних событий в 1С. На этом этапе проверяется Ключ продукта. Если Ключ продукта неверный, то компонента будет работать в демо-режиме. УстановитьРегулярноеВыражение(Regex) Устанавливает свойство «РегулярноеВыражение», с проверкой на его корректность

korv1982 commented 7 years ago

В регулярных выражениях используется библиотека стандартных подсистем с++ regEx = str_regex; С кодировкой сам не могу понять. При заливке на ГИТ все побилось.

shachneff commented 7 years ago

Вот и я пытался изучать С++ на этой компоненте. Но в определенный момент времени потребность в компоненте отпала (изменилось место работы) - и вот результат: заброшенный код, который стали писать вы все. Спасибо!

dakotikov commented 7 years ago

Привет! Вот пытаюсь по тестировать, но что-то не получается. Подключаю компоненту - все ок Дальше подключаюсь к астериску - Подключиться("ip","port") - все ок В обработчике событий, показывает одно событие: ROM-Asterisk-Native Connected Server:данные сервера и на этом все... Может подскажите что еще надо сделать? Или есть у кого простенький пример обработки подключения? Пробовал - Action: login (и далее нужные параметры) - вроде без ошибок Пробовал менять РежимПрослушивания(True/False) - вроде без ошибок А вот событие не показываются..

korv1982 commented 7 years ago

В Pull Request два файла. Пример подключения и работы. В модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы добавить УправлениеТелефониейКлиент.Активизировать();

korv1982 commented 7 years ago

Забыл. В модуле управляемого приложения добавить процедуру

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) //ДанныеСобытия=УправлениеТелефониейКлиент.ДанныеВСоответствие(Данные); //Сообщить("Источник="+ Источник+ " Событие="+Событие+" Данные="+Данные);

// ИнноваТелефония
Если Источник = "InnovaIT-Asterisk-Native" Тогда
    УправлениеТелефониейКлиент.ОбработатьВнешнееСобытие(Событие,Данные);
КонецЕсли;
// Конец ИнноваТелефония

КонецПроцедуры

И добавить две глобальные переменные

Перем ПараметрыПриложения Экспорт; Перем ГлТелефония Экспорт;

dakotikov commented 7 years ago

Спасибо! А это точно пример с этой компонентой? Смущает другое название источника.. И еще вопрос, будет работать только на управляемом приложении? А на обычном?

korv1982 commented 7 years ago

Это пример из форка. Который я притащил сюда. Работает в боевом режиме. При 50 сотрудниках. Полёт нормальный.

korv1982 commented 7 years ago

На обычном тоже будет работать. Только по технологии native

dakotikov commented 7 years ago

Все получилось. Теперь воюю с регулярными выражениями. Спасибо!

korv1982 commented 7 years ago

А чем мои не устроили?

dakotikov commented 7 years ago

Устроили =) Разбираюсь что и как работает Там в комментариях описано Newstate, Hangup - сейчас пробую их подключать и смотрю что получается

korv1982 commented 7 years ago

ECMAScript в помощь. Не забываем экранировать.

DimanoOVS commented 7 years ago

Доброго времени суток. Не могу понять что не так делаю.

Не УДАЛОСЬ подключить загрузить компоненту для связи с Asterisk{Обработка._ПанельТелефонии.Форма.ПанельУФ.Форма(81)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты

Не создать объект внешней компоненты для связи с Asterisk.{Обработка._ПанельТелефонии.Форма.ПанельУФ.Форма(25)}: Тип не определен (AddIn.ROM-Asterisk-Native)

oleksandr-lysak commented 7 years ago

Сборка проходит успешно, но при установке вот такая проблема: image Может кто подскажет что не так делаю?

DimanoOVS commented 7 years ago

Запуск в толстом клиенте? Так же важна разрядность клиента.(Я не профи, но у меня вроде как заработало :) )

korv1982 commented 7 years ago

В тонком клиенте тоже работает, только не в WEB.

oleksandr-lysak commented 7 years ago

DimanoOVS может сбросишь dll? Или может я не так подключаю: АдресВнешнейКомпоненты = "D:\1C\asterisk\BROM-Asterisk-Native-master\Debug\ROM-Asterisk-Native1.dll"; УстановитьВнешнююКомпоненту(АдресВнешнейКомпоненты); ?

korv1982 commented 7 years ago

так нельзя. Она в zip архиве должна быть с XML вида " "

DimanoOVS commented 7 years ago

У меня так

Функция ЗагрузитьКомпонентуТелефонии_NativeAPI() Попытка ПутьКФайлу=Объект.ПутьКФайлуВК; Результат = ПодключитьВнешнююКомпоненту(ПутьКФайлу, "sip", ТипВнешнейКомпоненты.Native); Сообщить(Результат); Сообщить(ПутьКФайлу); Исключение Сообщить(Результат+"Не удалось подключить загрузить компоненту для связи с Asterisk"+ОписаниеОшибки()); Возврат Ложь; КонецПопытки; КонецФункции

Использую только Native

oleksandr-lysak commented 7 years ago

Положил в архив с файлом MANIFEST.xml: `<?xml version="1.0" encoding="UTF-8"?>

` При `АдресВнешнейКомпоненты = "D:\BROM-Asterisk-Native.zip"; УстановитьВнешнююКомпоненту(АдресВнешнейКомпоненты);` Такая же ошибка
korv1982 commented 7 years ago

Скачай два файла. "Управление телефонией сервер" и управлениеТелефониейКлиент. Соответственно расположи их в общих модулях.

В Pull Request два файла. Пример подключения и работы. В модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы добавить УправлениеТелефониейКлиент.Активизировать();

абыл. В модуле управляемого приложения добавить процедуру

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) //ДанныеСобытия=УправлениеТелефониейКлиент.ДанныеВСоответствие(Данные); //Сообщить("Источник="+ Источник+ " Событие="+Событие+" Данные="+Данные);

// ИнноваТелефония Если Источник = "InnovaIT-Asterisk-Native" Тогда УправлениеТелефониейКлиент.ОбработатьВнешнееСобытие(Событие,Данные); КонецЕсли; // Конец ИнноваТелефония

КонецПроцедуры

И добавить две глобальные переменные

Перем ПараметрыПриложения Экспорт; Перем ГлТелефония Экспорт;

korv1982 commented 7 years ago

Замени источники на свои

oleksandr-lysak commented 7 years ago

УправлениеТелефониейКлиент не вижу