|
Кто хорошо знает C++ для интеграции 1С через ВК с Golang | ☑ | ||
---|---|---|---|---|
0
Garykom
гуру
22.06.19
✎
11:58
|
Собственно хочу реализовать сабж, сделать чтобы на Golang можно было писать внешние компоненты для 1С.
Самое для меня важное это вызов внешнего события в 1С из кода на Golang. В Golang есть cgo, которое умеет "Calling Go functions from C" https://github.com/golang/go/wiki/cgo Но сразу встала трабла что cgo сделано под gcc а не под msvc и с примерами 1С ВК на C++ под VS не хочет. Пришлось слегка извращаться, причем неявное подключение с линковкой на этапе компиляции не прошло и пришлось использоватья явную через LoadLibrary. Пока что сделал, скомпилил код на Го в dll с экспортной функцией. "go build -o awesome.dll -buildmode=c-shared" Далее взял шаблон ВК для 1С на C++ и подправил там добавив
Ну и при вызове из 1С этот код успешно отработал и показал сумму 3. Кстати если FreeLibrary оставить то сеанс 1С выкидывает с ошибкой. Проблема в том что у меня очень посредственные знания C++ и не могу сам реализовать с лету: "передача адреса функции в dll для обратного вызова". Особенно много заморочек ожидаю с преобразованиями типов, между C|C++|Go Кто может оказать помощь с этим? |
|||
1
Garykom
гуру
22.06.19
✎
12:00
|
(0)+ Надо из 1С ВК С++ передать в Golang DLL адрес функции для обратного вызова, чтобы например http-сервер на голанге мог передавать полученное в 1С через внешнее событие.
Голанг умеет вин dll испольовать https://github.com/golang/go/wiki/WindowsDLLs |
|||
2
Garykom
гуру
22.06.19
✎
12:02
|
(0)+ Вызов функций Go из других языков
https://habr.com/ru/company/mailru/blog/324250/ |
|||
3
NorthWind
22.06.19
✎
17:30
|
Вот тут неплохо расписано про коллбэки в С++ https://www.gamedev.ru/code/articles/func_obratnogo_visova
|
|||
4
PloAl
22.06.19
✎
17:44
|
(0) Зачем?
На сервере 1с есть свои http сервисы, и для ВК нет на сервере внешнего события. |
|||
5
Garykom
гуру
22.06.19
✎
20:16
|
(4) Для клиента и мобильного.
|
|||
6
Garykom
гуру
22.06.19
✎
20:17
|
(3) Сенкс почитаю.
|
|||
7
PloAl
22.06.19
✎
20:33
|
(5) На клиентах серверная http часть?
Белые ip на каждого и возможно доменные имена? |
|||
8
Garykom
гуру
22.06.19
✎
21:24
|
(7) Нет это ближе к прямому обмену между клиентами и сообщениям/вызовам с сервера на клиент.
Короче дешевая замена "системы взаимодействия" от 1С. Ну и заодно мобильные приложения смогут друг с другом общаться и все клиенты облегчается подключение внешнего ТО, там будет достаточно http-запросов от него на чем угодно. |
|||
9
Garykom
гуру
22.06.19
✎
21:25
|
(7) Кстати в ipv6 белые ip на каждого и поддоменные имена это вполне реально.
|
|||
10
Garykom
гуру
22.06.19
✎
22:03
|
Хотя имхо это 1С пора бы уже в платформу http-сервер встроить причем не только на сервере но и на всех клиентах.
Вроде как в тестовой 8.15 свой встроенный http-сервер уже, но не думаю что на клиентах. |
|||
11
Garykom
гуру
22.06.19
✎
22:04
|
(10) *в тестовой 8.4
|
|||
12
PloAl
22.06.19
✎
22:23
|
(8) Почему не websocket? Там всего один белый и один доменный адрес нужен будет, сервер взаимодействие его использует.
|
|||
13
Garykom
гуру
22.06.19
✎
22:27
|
(12) У меня цель заюзать все что дает golang для 1С, а там пофиг ws или http.
|
|||
14
PloAl
22.06.19
✎
23:12
|
Для сервера на Go, не важно на чем написаны клиенты подключающиеся по ws, http. Как пример Docker на Go написан.
|
|||
15
Garykom
гуру
22.06.19
✎
23:47
|
(14) Так применять Go как обычный бэк и где 1С выступает клиентом-фронтом уже попробовал и мне понравилось, реально быстро и довольно просто писать то что требуется.
Захотелось использовать силу Golang еще для чего то, в данном случае разные ВК для 1С. Сча нормально только на C++ и Delphi/Lazarus можно ВК писать, и то С++ не сказал бы что нормально, слишком сложно для вхождения. Golang же так как умеет компилироваться в dll|so должен по идее подходить замечательно, осталось заставить. |
|||
16
PloAl
23.06.19
✎
11:33
|
so для android, это точно не быстро. В нескольких статьях по JNI помню было написано, код на c++ в JNI будет выполняться медленнее аналогичного кода на java, если есть возможность написать на java пишите на java. Проверял это утверждение, получение данных в МП заняло 0,8 сек через ВК и 0,08 напрямую интентом в мобильное приложение.
|
|||
17
Garykom
гуру
23.06.19
✎
15:50
|
(16) Go как бы не для скорости, по тестам даже Java быстрее.
Кстати https://github.com/golang/go/wiki/Mobile прикольная штука очень напоминающая МП. Тоже понравилось, достаточно просто приложения под Android и iOS писать, сильно проще чем на Java или на C++. |
|||
18
PloAl
23.06.19
✎
18:18
|
(17) Речь про дополнение функционала android приложения через JNI, C++.
Не будет на androide сервер на Go быстрее аналогичного сервера на Java. На ПК Go будет быстрее, но не в мобильном приложении android. Обычная ВК тоже не самое быстрое решение. Приложение без ВК и без 1с, но с аналогичным функционалом по тестам почти в два быстрее. При передаче данных во внешнее событие 1с, надо выделять память в 1с "m_iMemory->AllocMemory(...." и дублировать туда данные, хорошо если их не много, а если передается большой файл... |
|||
19
Garykom
гуру
23.06.19
✎
18:40
|
(18) https://habr.com/ru/post/260609/
И да мне глубоко пофиг что на передачу больших данных будет тратиться время если это позволит реализовать требуемый но отсутствующий пока в 1С функционал. И да сам то скомпилированный код на Golang пашет сильно быстрее чем 1С но конечно медленнее чем нативный C++ или Java, хотя и с тонкостями. На десктопе Java уже сильно оптимизирована и обгоняет сильно Go, всего чуть чуть отставая от C++. Но вот на мобильных как это ни странно но Go там шустрее чем Java, практически как С++. |
|||
20
Garykom
гуру
23.06.19
✎
18:42
|
(18) Вы ошибаетесь насчет быстродействия Go в сравнении с Java на ПК и на android, все совершенно наоборот как это ни странно, судя по тестам.
|
|||
21
PloAl
23.06.19
✎
20:34
|
(20) Не ошибается тот кто ничего не делает.
По этому тесту java быстрее https://habr.com/ru/post/424649/ или по этим https://stackoverflow.com/questions/51806224/speed-of-golang-vs-java https://www.pvsm.ru/java/255977 Не имею привычки спорить и что то доказывать. |
|||
22
Garykom
гуру
23.06.19
✎
20:44
|
(21) Ну да на обычном x86 или x86_64 компе С++ и Java быстрее чем Golang, я как бы об этом и написал.
В отличие от вас в (18) где чьи слова "На ПК Go будет быстрее, но не в мобильном приложении android." Но по тестам и практике на мобильных девайсах под android, Golang там шустрее чем Java в Dalvik или в ART. Хотя понятно Go там медленней чем нативный C++. |
|||
23
Garykom
гуру
24.06.19
✎
05:27
|
Яхуу почти все получилось, из С++ ВК передается в Go указатель на функцию и код на Go ее успешно вызывает.
Через дикие хаки в Голанге:
И вот так в С++:
В итоге Осталось все это допилить до рабочего. |
|||
24
Garykom
гуру
24.06.19
✎
05:44
|
Хм что прикольно можно сделать универсальную ВК для 1С, к которой очень легко подкладывать "плагины" на Go, написанные по определенным правилам на основе шаблона.
Нечто вроде DLL-Loader (и Miracle Native где тоже этот функционал есть) от Abadonna http://catalog.mista.ru/public/86142/ |
|||
25
Garykom
гуру
28.06.19
✎
03:32
|
Работает однако https://i.paste.pics/90eb0add55f02c4df11d9e307662db86.png
Осталось прикрутить цикл ожидания обработки ответа от 1С. |
|||
26
Сияющий в темноте
28.06.19
✎
09:00
|
Наверное,проще через http сервисы.
хотя,1с упорно делает начатьПолучение для файлов,а вот про асинхронный http запрос слышать не хочет. поэтому,1с будет висеть там,где любая другая программа успешно отрпботает |
|||
27
Garykom
гуру
28.06.19
✎
10:30
|
(26) Нафик http-сервисы они изменения конфы требуют.
Так у меня если взлетит будет возможность внешней обработкой даже в базовой. |
|||
28
yavasya
28.06.19
✎
10:32
|
(27) создай один универсальный исходя из входящих параметров
|
|||
29
yavasya
28.06.19
✎
10:32
|
(27) хотя тебе наверно уже не интересно используя 1С
|
|||
30
Сияющий в темноте
28.06.19
✎
18:30
|
Я в базовой ут 10 выходил просто через внешнюю обработку для поддержки ккм онлайн(это такая старая касса,которая товары запрашивала из 1с)но,получается,что обработка мешает работе пользователя,а если он не работает,то прекрасно через XmlHttpRequest идем на сервер,и тсд работает с базой,причем,в режиме long pooling.
|
|||
31
Garykom
гуру
28.06.19
✎
18:47
|
(30) Угу примерно для этого и хочу.
Некий беспроводной сканер через wifi или ТСД, которые с базовой даже могут работать полноценно. Получая оттуда наименования номенклатуры по ШК и работая с документами. Причем если просто беспроводной сканер то ACK/NAK заюзать для обратной связи. |
|||
32
Garykom
гуру
28.06.19
✎
18:49
|
(31)+ http-сервер у меня это просто пример такой работы через внешнее событие в 1С, ожидание ответа когда 1С обработает и запишет ответ куда то с тем же полученным номером через внешнее.
А ВК ожидает ответа и как пришел с нужным номером от 1С то отправляет его назад. |
|||
33
Сияющий в темноте
28.06.19
✎
18:51
|
У меня все было проще,внешняя обработка шлет запрос на сервер,дескать что надо сделать,ответ придет или с запросом от сервера,или сервер скажет еще раз зайди.
|
|||
34
Garykom
гуру
28.06.19
✎
18:53
|
(32)+ Точнее даже можно много сканеров или ТСД на одну базовую навесить.
Или несколько своих веб клиентов. И догадываюсь что это нарушение лицензионного 1С. |
|||
35
Garykom
гуру
28.06.19
✎
18:54
|
(33) Слишком долго и надо во внешней обработке тогда в цикле стучаться на сервер еще внешний.
Тут сервером сама ВК работает по сути и асинхронная работа в 1С. Пришел запрос через внешнее событие, 1С отработала и отправила ответ через вызов метода ВК, юзер даже не заметит возможно. |
|||
36
Сияющий в темноте
28.06.19
✎
18:55
|
(34) нарушение будет,если ты обьекты 1с будет на тсд имитировать,а если с данными товаров,то это просто онлайн режим,кассы кем онлайн(не путать с онлайн ккт)работали же с базовой,и никто про лицензии не вспоминал.
|
|||
37
Garykom
гуру
28.06.19
✎
18:57
|
(36) Ну некий интерфейс на ТСД то будет с показом данных документа из базовой 1С.
|
|||
38
Garykom
гуру
28.06.19
✎
18:59
|
(37)+ Точнее там будет МП обычное, которое через http-соединение дергает мою ВК-сервер.
И к себе сначала номенклатуру затягивает по ШК, затем документ сохраняет а может и прочитать. |
|||
39
Сияющий в темноте
28.06.19
✎
20:08
|
нужен прокси между ними,чтобы несколько тсд дули в один прокси и все их запросы пакетом в 1с
|
|||
40
Garykom
гуру
28.06.19
✎
20:18
|
(39) Golang часть в моей ВК это и есть прокси + веб-сервер в одной коробке.
Пакетом нет смысла, но можно кэширование прикрутить тех же запросов чтобы ответ сразу возвращался. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |