Skip to content

Пример внешней компоненты для 1С:Предприятие 8 по технологии Native API на языке rust

License

Notifications You must be signed in to change notification settings

medigor/example-native-api-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

example-native-api-rs

Пример внешней компоненты для 1С:Предприятие 8 по технологии Native API на языке rust

Документция на ИТС | Шаблон компоненты на c++ от Infactum

Преимущества по сравнению с компонентой на c++

  • Преимущества самого языка rust и его экосистемы
  • Для Windows не требуется msvc, собирается полностью с использованием свободных инструментов

Обзор

Компоненты по технологии Native API предполагают разработку на языке с++, т.к. компонента должна принимать и возвращать указатели на виртуальные классы c++. Компонента для windows должна собираться только компилятором msvc, а для linux и macos подойдет gcc/clang. Как известно, взаимодействие rust с c++ из коробки не поддерживается.

Одним из вариантов было использовать cxx или подобные библиотеки. Это также бы потребовало использовать msvc.

Другой вариант - вручную реализовать виртуальные таблицы, именно этот вариант и реализован. На godbolt можно посмотреть, как выглядят виртуальные таблицы для разных компиляторов. Виртуальные таблицы msvc отличаются от gcc/clang, при этом gcc и clang используют одинаковое ABI. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты.

Описание файлов

  • src/lib.rs - корень крейта, здесь располагаются экспортные функции GetClassNames и др.
  • src/ffi.rs - в этом модуле всё что связано с взаимодействием, также здесь находится весь небезопасный код.
  • src/addin1.rs - здесь непосредственно реализация компоненты, причем весь код безопасный.
  • conf1c - конфигурация 1С (выгрузка из конфигуратора 8.3.22), минимальный тестовый код.

Разработка

Я использую для разработки VS Code. Отлаживать и тестировать компоненту удобнее всего в файловой базе. Чтобы при нажатии F5 сразу запускалась 1С, нужно поместить в файл .vscode/launch.json примерно такой код:

{ "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "launch", "name": "Debug 1С", "program": "путь/к/файлу/1cv8c", "args": [ "/IBName", "Test1" ], "cwd": "${workspaceFolder}", "preLaunchTask": "rust: cargo build" } ] }

Для разработки на linux я использую виртуальную машину Hyper-V, VS Code подключается по ssh. Чтобы запуск 1С работал из ssh, нужно в конфигурацию запуска добавить:

"env": {"DISPLAY": ":1"}

Для разработки и тестирования также подходит Учебная версия 1С, но версия для windows только x32.

MacOS не тестировал, думаю должно работать.

Android/iOS/веб-клиент не реализовано и планов таких нет.

About

Пример внешней компоненты для 1С:Предприятие 8 по технологии Native API на языке rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published