Внешние компоненты 1С и язык C++

26.01.24

Разработка - Разработка внешних компонент

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

Всем привет! На связи я, и мое настроение - немного вынести вам мозг, а потом собрать его и разложить по полкам. Поэтому я придумал этот цикл статей, где опытный копипастер расскажет менее опытным компипастерам, как накопипастить внешнюю компоненту для 1С.

Итак, приступим.

 

1. Языки программирования.

В стародревние времена умные существа придумали компьютер, который программировался нажатием тумблеров, поворачиванием рычагов и прочими мутными способами. Поэтому другие умные существа тут же придумали языки программирования. Началось все, предположу, с таких языков, как ассемблер, который был в сути своей мнемоническим обозначением машинных команд. А слово "мнемонический" у меня, лично, ассоциируется с Джонни Мнемоником - парнем, который, если мне не изменяет память, приторговывал своей памятью.

Но скоро умным существам наскучил и ассемблер, что привело к бурному рассвету языкопридумывания. И вот уже все, кому не лень, кинулись защищать свои докторские, придумывая все новые и новые языки программирования. Потом докторские сменились кандидатскими, потом дипломными, затем курсовыми работами, и вот уже каждый детсадовец придумал себе по языку программирования. Именно поэтому их так много. Именно поэтому бедные входители в ИТ теперь выбирают между "какой язык учить" и "да ну его - буду проституткой РП" (все ж видели эту картинку, да?)

 

2. Программирование.

Испокон веков программированием (ну сразу после ассемблера, хотя и там не сильно сложнее) были в сути своей три операции:

  1. Присваивание.
  2. Условный переход.
  3. Безусловный переход.

Дальнейшее развитие языков шло по пути переиспользования кода - все эти процедуры/функции и передаваемые им параметры, возвращаемые ими результаты, вся эта богомерзкая рекурсия и богообразное ООП с его классами, методами, наследованием, инкапсуляциями и полиморфизмом...

В итоге все программирование сначала свелось к алгоритмам, которые быстро вошли в разнообразные библиотеки, из которых собрались разнообразные фреймворки, а потом превратилось в унылую копипасту со стековерфлоу Инфостарта.

Ну и для того, чтобы было что копипастить и переиспользовать, я и пишу очередную статью.

 

3. Язык С++

Ну вот, дошли до какой-то сути.

Итак, язык С++ - это такой непростой для современного копипастера язык, т.к. в нем помимо копипасты самого кода, нужно еще скопипастить команды, с помощью которых этот код соберется и превратится в нашем случае в работающую внешнюю компоненту. И если собрать простую программу достаточно просто, то если программа вдруг использует какие-то библиотеки (а она использует, поверьте), сборка некоторым образом усложняется.

 

3.1. Программа

Ну давайте перейдем к примерчикам. Начнем с хеллоу-ворлда:

#include <iostream>

int main(int argc, char **argv) 
{
  std::cout << "Hello. world!" << std::endl;
}

Блин, даже строчку с описанием функции я скопипастил, ибо не помню, что там argc, а что там argv. Зато все остальное воспроизвел по памяти, так что есть еще порох в пороховницах!

 

3.2. Компиляция программы

Чтобы наша программа заработала, надо ее откомпилировать. Компиляция превращает файл с текстом программы в программу. Притом компиляция состоит из двух эпизодов: создание объектного файла (даже не спрашивайте, что это - я с этим последний раз в 2000-м сталкивался и уже забыл, что мне не мешает писать на С++ внешние компоненты), а во второй части марлезонского балета объектный файл линкуется с библиотеками, которые автор программы решил использовать (нередко даже не подозревая, что он их использует).

Итак, давайте скомпилим. И да, давайте скомпилим и для винды, которой я пользуюсь на работе, и для линукса, в котором пишу эту статью.

#WINDOWS
cl.exe heloworld.cpp

#LINUX
g++ heloworld.cpp

Ну вот, никакой возни в гиперпространстве, никаких ключей компиляции - ничего! А на выходе у меня файл "a.out", запуск которого показывает, что я не зря ем котлеты на обед!

$ cat a.cpp 
#include <iostream>

int main(int argc, char **argv) 
{
  std::cout << "Hello. world!" << std::endl;
}

$ g++ a.cpp

$ ./a.out 
Hello. world!

Начало положено: программа написана, скомпилирована и запущена! Пользы никакой, но чувство удовлетворения прям вот прет из организма!

 

4. Инфраструктура

Ну вот я такой взял и скомпилировал программу у себя на компьютере! Кто молодец? Я молодец! Но если вы попробуете это все на своем компьютере провернуть, то, боюсь, у вас это может не выйти. Почему? Потому, что для создания программы нужны, как бы это банально ни звучало, свои программы. Список программ условно такой:

  1. Компилятор.
  2. Библиотеки.

Если вы используете православный линукс, то нужно установить пакет с компилятором и библиотеками с помощью пакетного менеджера. В убунту этот пакет называется build-essential и ставится как-то так:

sudo apt install build-essential

Этого уже достаточно и для компиляции нашего примера, и для сборки внешней компоненты.

Если же у вас богомерзкая венда, то вам придется установить гигабайтищи визуал студио. Если кто-то знает, как поставить минимальный набор для сборки в винде из командной строки - расскажите в комментах. И да, не предлагайте WSL - внешнюю компоненту для винды можно собрать только на виндовом компиляторе ль мелкомягких. По крайней мере я нигде не нашел, как это можно сделать по другому. Но если вы это знаете - напишите в комментариях, буду крайне признателен.

Также в винде для упрощения жизни мелкомягкие придумали несколько батушников, которые запускают среду для сборки, в которой уже прописаны все эти переменные окружения, которые позволяют просто и со вкусом написать то самое "cl helloworld.cpp". Они там где-то зарыты в меню пуск и называются типа "визуал студио девлопмент тулз комманд промпт бла-бла-бла". И там их несколько - для 32-битной сборки, для 64-битной, для кросс-платформы и для чего-то еще - развлекайтесь, ну или просто запустите MS Visual Studio и пишите прям там, но тогда такой лаконичности не выйдет. Да и вообще надо бы понимать, как там оно внутри крутится без всех этих CMake.

Я надеюсь, вы сами разберетесь, как там и что в винде установить? Если нет, то поставьте себе vscode, а там плагин для С++, из ридми которого можно провалиться на сайт мелкомягких и найти крайне запутанный мануал (впрочем, как и любой другой мануал от мелкомягких, написанный китайским студентом в перерывах между парами за столовскую котлету).

 

5. Внешняя компонента

Итак, дошли до внешних компонент. И тут есть больше, чем одна возможность.

 

5.1. А какие могут быть варианты?

В действительности, на просторах гитхаба раскидано несколько вариантов внешних компонент, которые отличаются от того, что предоставляет 1С в своем архиве с описанием технологии этих внешних компонент создания. Я не буду касаться вариантов СОМ - этому посвящены просто горы различных трудов: диссертаций, курсовых, детсадовских поделок, ... Давайте посмотрим быстрым взором на то, что гуглится не отходя от кассы.

Итак, вариант номер раз - это мануал от самой 1С с какими-то примерами. Общую информацию можно посмотреть тут, а полный архив доступен на ИТС.

Вариант номер два - это шаблон от infactum, на который ссылаются не только лишь все. Но там есть проблема с именами свойств на русском в linux x64 - они у меня состоят из одной буквы в отладчике и не могут быть изменены. При том в винде все ок и на x64, и на x32.

Вариант номер три - шаблон от kandr который тоже ссылается на шаблон номер два, который ссылается на... Мне, кстати, этот шаблон понравился больше, т.к. в нем, в отличие от infactum, нет проблем в linux x64 с именами свойств.

 

5.2. Сборка.

Скачать пример - полбеды, нужно его умудриться собрать.

Итак, для linux это делается так (для варианта от infacrum):

g++ dllmain.cpp exports.cpp Component.cpp SampleAddIn.cpp -I../include -shared -o myvklib.so -O2 -std=c++17 -fPIC -static-libstdc++

Запускать сборку этой командой следует из каталога src. Без ключа -fPIC не соберется. -О2 сильно уменьшит размер компоненты, ключ -static-libstdc++ статически линкует стандартную библиотеку, делая компоненту переносимой между разными линуксами (но это не точно).

Для того, чтобы собрать это чудо в винде, нужно такое заклинание:

cl dllmain.cpp exports.cpp Component.cpp SampleAddIn.cpp /I../include /DWINDOWS /D_WINDOWS /EHsc /MT /LD /LINK /DEF:addin.def

Ну и не забываем, что писать это заклинение надо из командной строки, которая уже содержит все те переменные окружения и находится в глубинах меню "Пуск" под именем "что-то там вижуал студио девлопмент тулз комманд промпт ...".

На сегодня все, в скором времени продолжим и попробуем заставить шаблон делать что-нибудь полезное. Кстати, накидывайте идей полезного в комментах.

внешняя компонента ВК C++

См. также

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    18121    18    33    

22

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    46784    122    66    

66

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28218    138    100    

90

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

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

4600 руб.

27.06.2023    3392    2    0    

4

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    36470    113    127    

114

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7400    bayselonarrend    19    

154

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11206    dsdred    44    

130
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user-z99999 71 26.01.24 11:57 Сейчас в теме
Подскажите,
внешняя компонента это dll файл получается.
1) Его можно поместить на любой компьютер windows где 1С. Какие-то фремфорки должны быть в ОС?
2) на linux будет работать? компилировать как so файл.
3. starik-2005 3087 26.01.24 12:28 Сейчас в теме
(1)
1) Его можно поместить на любой компьютер windows где 1С. Какие-то фремфорки должны быть в ОС?
2) на linux будет работать? компилировать как so файл.
1. Dll - да, это внешняя компонента, которая будет собрана с помощью Visual Studio (ну или cl.exe). Но есть нюанс - если сборка статическая, то будет работать на всех компах и ничего ставить не надо. Если же библиотеки, используемые в сборке, не были скомпилированы для статической линковки, то нужно будет докинуть эти самые dll-ки этих самых библиотек, чтобы компонента заработала. Как пример - это open-ssl, который можно собрать как в виде dll, так и в виде статической библиотеки. В итоге когда вы будете использовать ВК, то она будет или содержать в себе статически прилинкованную библиотеку open-ssl, что позволит переносить эту библиотеку на другие компьютеры, или будет требовать наличия этих dll на компьютере любого пользователя, который попытается эту внешнюю компоненту использовать.
Надеюсь, не слишком сумбурно.
2. Если собрать библиотеку под linux, то создастся файл so, который можно будет подоткнуть в качестве внешней компоненты в linux.
Если положить dll для windows и so для linux в zip-архив, и добавить туда файл манифеста, то 1С сама будет подключать нужную компоненту, скомпилированную для соответствующей системы и ее разрядности.
2. quazare 3800 26.01.24 12:18 Сейчас в теме
по факту - статья как написать первую программу "hellow world", на "старинном" языке на уровне 2010 года.... нет информации - как что получается в результате компиляции - dll или что?

нет информации как применить эту dll, как добраться его "методов"......
scape; awk; +2 2 Ответить
4. starik-2005 3087 26.01.24 12:30 Сейчас в теме
(2)
нет информации как применить эту dll, как добраться его "методов"......
Это будет в следующей статье. Вы уже сейчас можете скачать с гита указанные примеры и собрать dll/so. При том по ссылками на компоненты есть документация, в которой показано, как их подключать из 1С.

Странно, что Вы вместо идей полезного в комментах проявляете токчистность.
ivprovotorov; +1 Ответить
7. quazare 3800 26.01.24 13:50 Сейчас в теме
(4) всегда хотел научится писать собственные защищенные dll, но не было возможности выбрать правильный язык
8. starik-2005 3087 26.01.24 13:55 Сейчас в теме
(7)
защищенные dll
Не совсем ясно, что имеется ввиду, но у микрософт есть на тему защищенности библиотек такая вот статья: https://learn.microsoft.com/ru-ru/windows/win32/dlls/dynamic-link-library-security

Но если речь идет о том, чтобы с помощью библиотеки защитить свое решение (по типу СЛК), то идея неплохая и можно ее проработать...
5. Shmell 546 26.01.24 12:49 Сейчас в теме
Хорошая статья! В дополнение могу отметить что можно использовать cmake, тогда заклинания командной строки перетекают в заклинания внутрь CMakeLists.txt

Пример ВК для интеграции с Kafka на шаблоне от infacrum https://github.com/NuclearAPK/Simple-Kafka_Adapter
sinichenko_alex; starik-2005; +2 Ответить
6. starik-2005 3087 26.01.24 12:57 Сейчас в теме
(5) Спасибо!
CMakeLists
Да, можно использовать нашаманенный CMake, но он обычно создает достаточно большой файл. Например, использование О2 сокращает файл с динамически слинкованной stdc++ в компоненте от kandr с 2 мегабайт до 1,4 - т.е. больше, чем на четверть. При том можно и динамически слинковать, в итоге библиотека занимает 122 кб.
ЗЫ: у меня compile.sh ругался на ключ --build, который шел после опций. А просто cmake . --build - да, отработал.
9. bakmistoff1977 36 26.01.24 14:11 Сейчас в теме
А написали бы, как стартовать 1С, получили бы 1000 плюсов. Это инфостарт, дедка...
10. starik-2005 3087 26.01.24 14:45 Сейчас в теме
(9)
дедка
Плюсани, не стесняйся ))
11. bprogs 277 26.01.24 19:43 Сейчас в теме
Спасибо, очень позитивно написано ++
12. orefkov 1152 26.01.24 21:46 Сейчас в теме
Немного попиарюсь, но вот на https://github.com/orefkov/v8sqlite тоже неплохой стартовый набор для нативной ВК на C++. И без проблем с русским языком.
JohnyDeath; adamx; Totoro; kraynev-navi; YA_418728146; starik-2005; +6 Ответить
13. starik-2005 3087 27.01.24 00:00 Сейчас в теме
(12)
неплохой стартовый набор
Отлично! Только в примерах у Вас подключение компоненты реализовано через ветвление:
        Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
            ПутьКВК = ПутьКВК + "v8sqlite.dll";
        ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
            ПутьКВК = ПутьКВК + "libv8sqlite.so";
        КонецЕсли;
Не совсем ясно, как одна v8sqlite.dll работает одновременно под 64 и 32 бита в винде. Ну и есть же у 1С такая классная штука, как манифест и зип-архив.
17. sinichenko_alex 211 29.01.24 03:30 Сейчас в теме
(13) на сколько помнится, в платформе 32-х битная компонента (если это windows и &НаКлиенте) может быть подключена одна и та же 32-х битная компонента, как на 32-х так и на 64-х разрядной версии платформы (не путать с разрядностью ОС). Если &НаСервере то там обязательно РазрядностьСервераПриложений = РазрядностьКомпоненты. Надеюсь я всё правильно помню и не ошибся.
19. starik-2005 3087 29.01.24 10:10 Сейчас в теме
(17)
на сколько помнится, в платформе 32-х битная компонента (если это windows и &НаКлиенте) может быть подключена одна и та же 32-х битная компонента, как на 32-х так и на 64-х разрядной версии платформы (не путать с разрядностью ОС).
Вот прям щаз попробовал подоткнуть 32-битную нативную компоненту на 64-битной платформе, ожидаемо получил такое сообщение. При том в 32-битной все ок. Что я делаю не так? Сдается мне, что Вы СОМ и натив спутали. В СОМ есть возможность подоткнуть 32-битную в 64-битной платформе.
Прикрепленные файлы:
20. sinichenko_alex 211 29.01.24 10:24 Сейчас в теме
(19) Вы пытаетесь установить внешнюю компоненту, а не подключить (судя по сообщению), это немного разные действия.
Смотрите как это примерно выглядит. Есть два варианта подключения компонент, попробую их описать ниже:
1. Вариант когда ваша компонента находится в zip архиве. Например там одна или более компонент, скажем для 32 и 64 бит Windows. Там же в этом архиве может лежать версия и для Linux, например. В этом же zip архиве должен лежать Manifest файл в формате xml. В нем как раз и описано для каких ОС и какой разрядности следует подключать тот или иной файл из архива https://infostart.ru/1c/tools/937366/
Далее такой zip архив кладётся в общий макет конфигурации в виде двоичных данных, и когда вы хотите подключить ВК из такого архива из общего макета, сначала нужно вызвать встроенный платформенный метод "УстановитьВнешнююКомпоненту()" ну или лучше её асинхронный метод "НачатьУстановкуВнешнейКомпоненты" (подробнее см. справку). Где в качестве параметра <Местоположение> вы указываете "ОбщийМакет.ИмяМакета" где лежит zip архив. В этот момент платформа распаковывает архив в кеш сама поняв какую ВК из архива нужно извлечь. И дальше ждет Ваших действий.
После установки можно подключать.
Пример:
УстановитьВнешнююКомпоненту("ОбщийМакет.ИмяМакета");
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ИмяМакета", "SipPhone", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
	Телефон = Новый("AddIn.SipPhone.SipPhone");
КонецЕсли;


Вариант 2. Тот который описан у Александра Орефкова - прямо из dll.
У вас нет архива и нет manifest файла и вы хотите сразу подключить компоненту, знаете разрядность и т.д.
Тогда вы вместо макета сразу пишите путь к файлу. В этом случае метод "УстановитьВнешнююКомпоненту()" вызывать не нужно! Сразу вызываете ПодключитьВнешнююКомпоненту().
На примере выше:
Результат = ПодключитьВнешнююКомпоненту("C:\SipPhone.dll", "SipPhone", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
	Телефон = Новый("AddIn.SipPhone.SipPhone");
КонецЕсли;

З.Ы. Попробуйте вариант №2.
21. starik-2005 3087 29.01.24 11:09 Сейчас в теме
(20) Ну вот попробовал для 32 и 64 из 64-битной платформы. 32 бита компонента не работает.
Прикрепленные файлы:
22. sinichenko_alex 211 29.01.24 11:11 Сейчас в теме
(21) А подключали &НаКлиенте или &НаСервере? Или может в обычном приложении?
23. starik-2005 3087 29.01.24 11:14 Сейчас в теме
(22) А Вы считаете, что Ждать работает на сервере? )))
24. sinichenko_alex 211 29.01.24 11:19 Сейчас в теме
(23) Все верно, Асинх это однозначно клиентская сторона... Выходит, что не подключается 32-х компонента на 64 клиенте. Очень странно почему у меня сложилось такое понимание. Мне устойчиво казалось, что данная возможность есть. Я у себя проведу пару экспериментов сегодня (в т.ч. и с Асинх). Напишу по результатам в этой же ветке.
25. starik-2005 3087 29.01.24 11:29 Сейчас в теме
(24)
Очень странно почему у меня сложилось такое понимание. Мне устойчиво казалось, что данная возможность есть.
СОМ-компоненты при определенных настройках СОМ+ так умеют, но про нативные я такого не слышал, поэтому и был удивлен приведенным текстом...
31. sinichenko_alex 211 31.01.24 03:52 Сейчас в теме
(25) Перепроверил информацию. И подключение компоненты как-то странно отработало если честно. В системе была установлена только одна версия х64 платформы. В свойствах базы был указан явный запуск в режиме х32. 32х компонента подключилась успешно. Затем я в свойствах базы указал явный запуск x64 для базы, и она снова подключилась успешно! Затем я загрузил другую версию платформы но уже только х32. Затем в свойствах базы указал, что запускаться нужно именно на этой версии платформы (которая х32). База запустилась на этой версии, и компонента х32 в режиме х32 подключилась.
После этого я снова вернул в свойствах базы предыдущую версию платформы (х64), и снова указал явный режим запуска х64, и.... Компонента не подключилась. Поведение конечно странное, но думаю можно смело констатировать факт:
х32 компоненты в режиме запуска платформы х64 не подключаются на клиенте (как мне ошибочно казалось ранее).
33. starik-2005 3087 31.01.24 07:32 Сейчас в теме
(31)
Затем я в свойствах базы указал явный запуск x64 для базы
Я всегда запускаю отдельный ярлык с х64 платформой, поэтому проблем с запуском не той разрядности не имею. В винде это все работает, такое впечатление, через раз, по крайней мере у меня вообще стартер не реагировал на указание, какую платформу запускать. Но всегда можно посмотреть в диспетчере задач, какая платформа запустилась.
sinichenko_alex; +1 Ответить
34. sinichenko_alex 211 31.01.24 07:35 Сейчас в теме
(33) согласен. Я тоже склоняюсь к тому, что просто не та разрядность платформы запустилась, вместо х64 запустилась х32 не зависимо от того что указано в свойствах базы (возможно какая-то незадокументированная особенность стартера). На счет ярлыка отличная идея, спасибо, возьму на вооружение.
32. sinichenko_alex 211 31.01.24 03:57 Сейчас в теме
14. bprogs 277 27.01.24 08:30 Сейчас в теме
очень хотелось бы чтоб убрали минусы в публикации, в комментариях то ладно, текст написал и забыл ,тут целую статью старался и катал, какой нибудь е зашел,что то там у ся в квадратной голове не уложил и решает поставить минус, ну естественно автор реагирует что за.. ,я же старался а тут всякие могут зайти на .. и пойти дальше
15. пользователь 27.01.24 17:30
Сообщение было скрыто модератором.
...
16. пользователь 28.01.24 06:03
Сообщение было скрыто модератором.
...
18. webester 26 29.01.24 06:35 Сейчас в теме
Замечания следующие. Токсичные они или нет, решайте сами, с моей личной точки зрения(а у меня другой быть не может) они строго по существу:
Пункты 1 и 2 надо выкинуть. Юморок и легкое повествование приветствуется конечно. Но если оно сильно не растягивает время на чтение статьи и вплетено в техническую часть. В данному случае это не так. Видно, что автор понимает о чем пишет, понимает со школьной скамьи и взялся аккуратно и основательно разложить по полочкам написание компоненты. И вроде даже неплохо получается. Тогда было бы неплохо разобрать исходный код шаблонов, что где делается зачем и почему(возможно мы увидим это в будущем). И объяснить почему заклинания именно такие, что за ключи и за что они отвечают. Раз уж так детально решил разобрать вопрос.
Идеи которые мне нужны были в виде компонент но не осилил с++ и написал исполняемый файл на go и обошелся без компоненты. Для меня не актуально уже, но в целом как пример почему нет.
1. Ресайз, обрезка картинок, добавление ватермарков, с разными уровнями прозрачности наклоненения и тд с помощью opencv то есть использование всей мощи этой библиотеки из 1С, было бы круто.
2. Работа с железом: опрос ком портов на тему какие есть вообще, какой свободен, какой занят. Было нужно для работы с торговым оборудованием(сейчас уже не нужно, но может кто-то страдает от этого как и я).
26. DmitryKSL 156 29.01.24 16:03 Сейчас в теме
(18)
написал исполняемый файл на go

А как 1С с этим файлом контачит? Просто интересно.
29. webester 26 29.01.24 17:45 Сейчас в теме
(26)
А как 1С с этим файлом контачит? Просто интересно.

Да никак не контачит. Получился исполняемый файл который не требует полномочий, принимает определенные параметры на вход и оставляет вывод там где я их ожидаю. Зашил это дело в макет и при необходимости распаковывал в темп, делал свое грязное дело, почищал за собой темп. Результат тот же самый, но не очень красиво. Хотелось бы то же самое, но нативно прям из кода 1С
28. starik-2005 3087 29.01.24 16:55 Сейчас в теме
(18)
И объяснить почему заклинания именно такие, что за ключи и за что они отвечают.
Так вроде же:
Запускать сборку этой командой следует из каталога src. Без ключа -fPIC не соберется. -О2 сильно уменьшит размер компоненты, ключ -static-libstdc++ статически линкует стандартную библиотеку, делая компоненту переносимой между разными линуксами (но это не точно).
Про инклюды, то вроде как это само собой разумеющееся - путь к каталогу с заголовочными файлами, на которые ссылается компонента. Стандарт С++17 - ну это да, можно было бы рассказать, но тогда статья была бы сильно больше. "-fPIC" - ну тут тоже непростой рассказ, так что принять на веру ))
27. TyurinArt 97 29.01.24 16:23 Сейчас в теме
вспомнился реверес techsys.dll, мимо проходил)
30. protexprotex 139 29.01.24 19:50 Сейчас в теме
Интересно. Спасибо. Напомнило как в конце 90-x писал на tasm ассемблерные игры и весь этот зоопарк собирал линковщиком :-)
Оставьте свое сообщение