Пишем внешнюю компоненту для 1С, NativeAPI на С++, для ОС Linux, с использованием Qt Creator

0. 57 13.05.22 11:00 Сейчас в теме
В статье рассмотрен процесс создания внешней компоненты для 1С в среде Qt Creator для операционной системы Linux (ubuntu, debian, mint и им подобных). На примере компоненты для сбора данных от внешней аппаратуры и сохранение их в базе, посредством 1С. В качестве внешней аппаратуры в данном примере будем использовать Arduino UNO.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 2680 13.05.22 14:40 Сейчас в теме
Статью читать предельно трудно, на мой взгляд. Помимо того, что код плохо отформатирован, так он еще и отдельными малосвязанными кусками выложен. Не совсем ясно, как скомпилировать библиотеку. Не ясно, зачем прописывать путь к библиотеке в /etc/..., если потом к этой компоненте будет полный путь. Или это нужно только для компиляции? Также не совсем ясно, чем сложнее использовать какой-нить vscode для ровно того же самого?

Да, статья, наверное, будет полезна тем, кто пытается разобраться с разработкой внешних компонент, но подача материала запутывает. Автор больше бы заработало, если бы выложил это, как статью без платного файла, добавив больше содержания и структурировав материал. При том куча внешних совершенно кроссплатформенных (включая андройды) компонентов лежат на гите, собрать которые можно легким нажатием пары кнопарей.
3. user1779098 57 13.05.22 15:38 Сейчас в теме
(1) если не прописать путь в /etc/..., то ОС не разрешит пользоваться этой библиотекой. Это Linux. Попробуйте не прописывать может и получится, но вот я с этим помучился. По поводу форматирования - старался сэкономить место. Спасибо за замечания, со следующей их учту.
20. AndreyShitov 16.05.22 05:29 Сейчас в теме
(3) Странно видеть мистификации "ОС не разрешит" от автора статьи по разработке библиотеки под эту самую ОС. В ld.so.conf всего-лишь указаны директории, где динамический линковщик будет искать файлы библиотек, не более.

1С и из своей директории как-то загружает, а ссылок на неё нет в /etc/ld.so.conf, и внешние компоненты подключаемые клиентом загружает не имея доступа на запись в /etc/ld.so.conf. Так что никаких "это Linux" здесь быть не может, здесь "я не разобрался". А за /home/<что угодно> в /etc/ld.so.conf вообще руки отрывать надо. В системе уже есть каталоги, где должны лежать файлы динамически подключаемых библиотек.

Из статьи абзац
ВАЖНО: Чтобы эту библиотеку могли использовать программы необходимо выполнить следующие действия
лучше убрать - это мало того, что неправда, так ещё и вредный совет.

И если боритесь за экономию места, во второй половине статьи двойной межстрочный интервал в блоках с кодом тоже не нужен, в первой половине статьи этой проблемы же нет.
22. user1779098 57 16.05.22 11:53 Сейчас в теме
В ld.so.conf всего-лишь указаны директории, где динамический линковщик будет искать файлы библиотек, не более - всё правильно. Так же там написано не 1С, а программы. Хотя замечание правильное и я с ним полностью согласен теоретически могут возникнуть случаи когда линковщику необходимо указать этот путь. Например у меня на более старом Mint, 1C (для обучения программированию) сама эту библиотеку не нашла. По поводу компоновки кода согласен и уже отвечал, что в следующий раз это учту. Спасибо за комментарий.
24. Infactum 306 17.05.22 09:13 Сейчас в теме
(22) Механизм поиска "библиотеки" для загрузки опредялется RPATH. Чтобы искать в том же каталоге, как например платформа делает, см. в сторону $ORIGIN
https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
4. user1779098 57 13.05.22 15:42 Сейчас в теме
(1)Ну а по поводу платности файла - я на сайте недавно и не нашёл способа выложить его полностью бесплатно. Объясните мне как это сделать. Могу его вам скинуть в личку.
5. starik-2005 2680 13.05.22 15:52 Сейчас в теме
(4) ну мне файл ни к чему - на гите десятки и компонет, и шаблонов.
Суть: если выкладываете файл, то получаете за скачивание, а если оформляете, как статью, то получаете 10 стартманей за публикацию + 30 за 50 "звезд" + 20 за 100 "звезд". Т.е. 60 стартманей за сотню звезд, которые вполне бы могла набрать Ваша статья, будь она грамотно оформлена. А файл - лучше ссылку на гит прикреплять, ну или исчерпывающе в статье писать о том, что надо сделать - тогда и файла будет не нужно.

Повторюсь, тематика, которую статья затрагивает, очень даже интересна сообществу. Я, например, просто такую статью писать не хочу - у меня нет реального кейса для применения ВК, т.к. я перешел на микросервисы и работу с аппаратурой я делегировал сервисам, поднятым на малинках и апельсинках, которые в 1С отдают данные через REST-API, о чем я как-то писал: https://infostart.ru/1c/articles/1543746/
6. user1779098 57 13.05.22 16:00 Сейчас в теме
2. morin 31 13.05.22 15:23 Сейчас в теме
Спасибо, очень круто! Буду разбираться.
7. ltfriend 964 13.05.22 18:33 Сейчас в теме
Не совсем понял, для чего было использовать Qt.
12. user1779098 57 13.05.22 23:17 Сейчас в теме
(7)Для VS полно примеров, просто решил попробовать реализовать на Qt (имею право). Результат - мы с вами убедились, что да это возможно (с некоторыми ограничениями конечно, работаю над их обходом). Другой вопрос нужно ли это вам. Но к счастью вы не один и я думаю найдутся люди которым это понадобится. Денег я за эти исследования не беру, надеюсь проделанная мной работа вам может пригодится в будущем, и вы сэкономите кучу времени используя эти наработки. Спасибо за комментарий.
21. AndreyShitov 16.05.22 05:39 Сейчас в теме
(12) КМК, комментарий о том, что вы Qt и не используете, плюс никаких QtCreator специфичных вещей в статье нет, чтобы заострять внимание именно на нём. С тем же успехом читатель может в kwrite/gedit/vim/etc набрать этот код и скормить компилятору.
23. user1779098 57 16.05.22 12:01 Сейчас в теме
(21)Qt использовал как редактор. С библиотеками от Qt могут возникнуть проблемы например на AstraLinux, где они отсутствуют, а с доустановкой например в закрытых учрежденьях могут возникнуть проблемы. Код спокойно компилируется и без Qt. От Qt только qmake.
25. AndreyShitov 17.05.22 12:40 Сейчас в теме
(23) Вы путаете сущности. QtCreator ≠ Qt. Вы сейчас сказали что-то вроде ".NET использовал как редактор", вместо "использовал Visual Studio". Qt - набор библиотек. QtCreator - на этих библиотеках написанная IDE.
8. cdiamond 217 13.05.22 20:57 Сейчас в теме
Несмотря на указанные выше недостатки всё равно поддержку автора плюсом. Библиотеку всё-таки надо помещать в lib или opt, в home ему не место.
10. user1779098 57 13.05.22 21:43 Сейчас в теме
(8)Спасибо, соглашусь с вами. Оставил в папке проекта чтобы показать нюансы регистрации в системе.
9. PerlAmutor 127 13.05.22 21:12 Сейчас в теме
Наконец то, что-то стоящее за долгое время. Побольше бы таких статей. Сам писать компоненты бросил из-за того, что API 1С не совместимо с MinGW и настоящей кроссплатформенности не получается.
11. user1779098 57 13.05.22 21:44 Сейчас в теме
13. starik-2005 2680 14.05.22 12:16 Сейчас в теме
(9) да, там проблема с заголовками для венды, но это решаемо, хоть и не совсем тривиально.
14. PerlAmutor 127 14.05.22 15:03 Сейчас в теме
(13) Там проблема в ABI (name mangles), иной работы исключений и внешних зависимых .dll файлах. Нельзя просто так взял и установить внешнюю компоненту, которая тянет за собой еще и ворох внешних .dll.
15. user1779098 57 14.05.22 15:25 Сейчас в теме
(14) Я делал проект под Linux использовал GCC 64. Если я правильно понимаю вы пытаетесь использовать MinGV - в нем могут возникнуть проблемы с пространствами имён namespace (легко решить, но тяжело разобраться), и из за Windows могут возникнуть проблемы с termio.h
19. starik-2005 2680 14.05.22 21:38 Сейчас в теме
(15) не, он пытается под линухом для венды откомпилить dll, а это вообще не просто ни разу - там есть def-файл в комплекте, но cl.exe делает либу, указывая индексы на описанные в def-файле имена, а MinGW этого не делает. Если я вообще правильно понял. Но и cl.exe требует соответствующего ключа для линковщика.
27. vxer 29.07.22 14:10 Сейчас в теме
(19) А вообще в принципе возможна кроссплатформенная сборка со всеми танцами с бубнами? Или это будут два принципиально разных проекта под каждую платформу?
26. vxer 29.07.22 14:07 Сейчас в теме
(15) Допустим, можно решить проблему termio.h, она вхдит в MSYS2. Какие могут конкретно возникнуть проблемы с namespac'ами, если собирать компоненту под MSYS2 под Windows?
28. user1779098 57 29.07.22 15:54 Сейчас в теме
termio.h только под Linux. Для Windows - windows.h. Реализация методов подключения к порту, чтения порта и отключения будут другими. При чём отличия достаточно большие.
29. vxer 29.07.22 18:06 Сейчас в теме
(28) Я ж не спрашиваю про termio.h. Я уже констатирую факт, что оно собралось, но под Windows имена экспортируемых функций из DLL, собранных виндовым GCC имеют вид _ZN7MyAddIn13extensionNameB5cxx11Ev, чего 1С явно ожидать от DLL-ки не будет, может в Linux её такое и удовлетворит, не знаю. Если библиотеки компилятора ещё и можно статически прилинковать в DLL, то вот уже библиотеку msys-2.0.dll статически прилинковать не получится, а в ней как раз и есть реализация termio. Вопрос лишь в том можно ли собрать всё же компоненту именно MinGW-w64 под Windows?
Прикрепленные файлы:
30. user1779098 57 30.07.22 04:32 Сейчас в теме
(29)
виндовым GCC

не нужно использовать виндовый GCC. Базовая компонента создана компанией 1С в VS и прекрасно компилируется её компилятором (MSVC называется). Так же прекрасно экспортируются все функции, сам лично проверял. То что выложил я - адаптировано для GCC 64 и Linux
31. user1779098 57 30.07.22 04:45 Сейчас в теме
(29)
имена экспортируемых функций и


(29) Я полагаю надо разобраться с кодировкой. В библиотеке используются широкие символы с длинной в 2 байта. Может по этой причине их названия искажены
17. пользователь 14.05.22 15:30
Сообщение было скрыто модератором.
...
18. пользователь 14.05.22 15:39
Сообщение было скрыто модератором.
...
16. пользователь 14.05.22 15:27
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
Разработчик 1С
Москва
зарплата от 180 000 руб. до 200 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Архитектор 1С
Москва
зарплата от 260 000 руб.
Полный день

Начальник отдела архитектуры
Москва
зарплата от 300 000 руб.
Полный день

Эксперт по технологическим вопросам
Москва
зарплата от 250 000 руб.
Полный день