Skip to content

Commit 071596b

Browse files
author
medigor
committed
project reorganization
1 parent 9fad5a3 commit 071596b

File tree

11 files changed

+53
-39
lines changed

11 files changed

+53
-39
lines changed

Cargo.toml

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
1-
[package]
2-
name = "addin"
3-
version = "0.1.0"
4-
edition = "2021"
5-
6-
[lib]
7-
crate-type = ["cdylib"]
1+
[workspace]
2+
members = ["addin1c", "example"]
3+
resolver = "2"
84

95
[profile.release]
10-
# opt-level = "z" # Optimize for size.
116
lto = true # Enable Link Time Optimization
127
codegen-units = 1 # Reduce number of codegen units to increase optimizations.
138
panic = "abort" # Abort on panic
149
strip = true # Automatically strip symbols from the binary.
15-
16-
[dependencies]
17-
utf16_lit = "2.0"
18-
smallvec = "1.11"

README.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,19 @@
2020
На [godbolt](https://godbolt.org/z/KM3jaWMWs) можно посмотреть, как выглядят виртуальные таблицы для разных компиляторов. Виртуальные таблицы *msvc* отличаются от *gcc*/*clang*, при этом *gcc* и *clang* используют одинаковое ABI. Виртуальные таблицы реализованы в объеме достаточном для создания компоненты.
2121

2222
## Описание файлов
23-
* [src/lib.rs](src/lib.rs) - корень крейта, здесь располагаются экспортные функции GetClassNames и др.
24-
* [src/ffi.rs](src/ffi.rs) - в этом модуле всё что связано с взаимодействием, также здесь находится весь небезопасный код.
25-
* [src/addin1.rs](src/addin1.rs) - здесь непосредственно реализация компоненты, причем весь код безопасный.
26-
* [src/addin2.rs](src/addin2.rs) - упрощенный вариант, используется другой трейт.
27-
* [src/simple.rs](src/simple.rs) - трейт Addin для упрощенного варианта.
28-
* [src/macros.rs](src/macros.rs) - содержит единственный макрос `name!` для удобного задания имен свойств, методов, классов.
29-
* [conf1c](conf1c) - конфигурация 1С (выгрузка из конфигуратора 8.3.22), минимальный тестовый код.
23+
### [addin1c](addin1c) - крейт с вспомогательными объектами
24+
* [lib.rs](addin1c\src\lib.rs) - корень крейта.
25+
* [ffi.rs](addin1c\src\ffi.rs) - в этом модуле всё что связано с взаимодействием, также здесь находится весь небезопасный код.
26+
* [simple.rs](addin1c\src\simple.rs) - трейт Addin для упрощенного варианта.
27+
* [macros.rs](addin1c\src\macros.rs) - содержит единственный макрос `name!` для удобного задания имен свойств, методов, классов.
28+
29+
### [example](example) - пример компоненты, содержит 2 объекта:
30+
* [lib.rs](example\src\lib.rs) - корень крейта, здесь располагаются экспортные функции GetClassNames и др.
31+
* [addin1.rs](example\src\addin1.rs) - реализация компоненты с помощью низкоуровнего интерфейса, причем весь код безопасный.
32+
* [addin2.rs](example\src\addin2.rs) - упрощенный вариант, используется другой трейт.
33+
34+
### [conf1c](conf1c) - конфигурация 1С (выгрузка из конфигуратора 8.3.22), минимальный тестовый код.
35+
* [DataProcessors\Обработка1\Forms\Форма\Ext\Form\Module.bsl](conf1c\DataProcessors\Обработка1\Forms\Форма\Ext\Form\Module.bsl) - тесты для ручного запуска.
3036

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

addin1c/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "addin1c"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
smallvec = "1.11"
8+
utf16_lit = "2.0"
File renamed without changes.

addin1c/src/lib.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
mod ffi;
2+
mod macros;
3+
mod simple;
4+
5+
pub use ffi::{
6+
create_component, destroy_component, Addin as RawAddin, AttachType, Connection, ParamValue, Tm,
7+
Variant,
8+
};
9+
pub use simple::{Addin as SimpleAddin, MethodInfo, Methods, PropInfo};
10+
pub use utf16_lit::utf16_null;

src/macros.rs renamed to addin1c/src/macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
#[macro_export]
33
macro_rules! name {
44
($text:expr) => {
5-
&utf16_lit::utf16_null!($text)
5+
&addin1c::utf16_null!($text)
66
};
77
}
File renamed without changes.

example/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[package]
2+
name = "addin"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[lib]
7+
crate-type = ["cdylib"]
8+
9+
[dependencies]
10+
addin1c = { path = "../addin1c" }

src/addin1.rs renamed to example/src/addin1.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
use utf16_lit::utf16;
2-
3-
use crate::{
4-
ffi::{Addin, ParamValue, Tm, Variant},
5-
name,
6-
};
1+
use addin1c::{name, ParamValue, RawAddin, Tm, Variant};
72

83
const PROPS: &[&[u16]] = &[
94
name!("Test"),
@@ -45,7 +40,7 @@ impl Drop for Addin1 {
4540
fn drop(&mut self) {}
4641
}
4742

48-
impl Addin for Addin1 {
43+
impl RawAddin for Addin1 {
4944
fn register_extension_as(&mut self) -> &'static [u16] {
5045
name!("Class1")
5146
}
@@ -217,7 +212,8 @@ impl Addin for Addin1 {
217212
match param.get() {
218213
ParamValue::Empty => {
219214
if i == 0 {
220-
if !param.set_str(&utf16!("Return value")) {
215+
let s = "Return value".encode_utf16().collect::<Vec<u16>>();
216+
if !param.set_str(&s) {
221217
return false;
222218
}
223219
} else {

src/addin2.rs renamed to example/src/addin2.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use crate::{
2-
simple::{Addin, MethodInfo, Methods, PropInfo},
3-
ffi::{ParamValue, Variant}, name,
4-
};
1+
use addin1c::{name, MethodInfo, Methods, ParamValue, PropInfo, SimpleAddin, Variant};
52

63
pub struct Addin2 {
74
prop1: i32,
@@ -52,7 +49,7 @@ impl Addin2 {
5249
}
5350
}
5451

55-
impl Addin for Addin2 {
52+
impl SimpleAddin for Addin2 {
5653
fn name() -> &'static [u16] {
5754
name!("Class2")
5855
}

0 commit comments

Comments
 (0)