You've already forked native_api_1c
mirror of
https://github.com/Sebekerga/native_api_1c.git
synced 2025-06-14 23:45:13 +02:00
v0.10.1 to reflect macro changes
This commit is contained in:
54
README.md
54
README.md
@ -7,26 +7,55 @@
|
|||||||
|
|
||||||
Пример реализации простой компоненты:
|
Пример реализации простой компоненты:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# Cargo.toml
|
||||||
|
[package]
|
||||||
|
name = "my_addin"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
utf16_lit = "2.0"
|
||||||
|
native_api_1c = "0.10.1"
|
||||||
|
```
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// lib.rs
|
// src/lib.rs
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use native_api_1c::{
|
use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};
|
||||||
native_api_1c_core::{self, ffi::connection::Connection},
|
|
||||||
native_api_1c_macro::AddIn,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(AddIn)]
|
#[derive(AddIn)]
|
||||||
pub struct MyAddIn {
|
pub struct MyAddIn {
|
||||||
|
// соедиенение с 1С для вызова внешних событий
|
||||||
#[add_in_con]
|
#[add_in_con]
|
||||||
connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности
|
connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности
|
||||||
|
|
||||||
|
// свойство, доступное для чтения и записи
|
||||||
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
|
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
|
||||||
pub some_prop: i32,
|
pub some_prop: i32,
|
||||||
|
|
||||||
|
// свойство, доступное только для чтения
|
||||||
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
|
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
|
||||||
pub protected_prop: i32,
|
pub protected_prop: i32,
|
||||||
|
|
||||||
|
// функция, принимающая один или два аргумента и возвращающая результат
|
||||||
|
// в 1С можно вызвать как:
|
||||||
|
// ОбъектКомпоненты.МояФункция(10, 15); // 2й аргумент = 15
|
||||||
|
// ОбъектКомпоненты.МояФункция(10); // 2й аргумент = 12 (значение по умолчанию)
|
||||||
|
// Если функция возвращает ошибку, но не паника, то в 1С будет вызвано исключение
|
||||||
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
|
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
|
||||||
pub my_function: fn(&Self, i32) -> i32,
|
#[arg(Int)]
|
||||||
|
#[arg(Int, default = 12)]
|
||||||
|
#[returns(Int, result)]
|
||||||
|
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
|
||||||
|
|
||||||
|
// Процедура, ничего не получающая, ничего не возвращающая
|
||||||
|
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
|
||||||
|
pub my_procedure: fn(&mut Self),
|
||||||
|
|
||||||
private_field: i32,
|
private_field: i32,
|
||||||
}
|
}
|
||||||
@ -38,12 +67,21 @@ impl MyAddIn {
|
|||||||
some_prop: 0,
|
some_prop: 0,
|
||||||
protected_prop: 50,
|
protected_prop: 50,
|
||||||
my_function: Self::my_function,
|
my_function: Self::my_function,
|
||||||
|
my_procedure: Self::my_procedure,
|
||||||
private_field: 100,
|
private_field: 100,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn my_function(&self, arg: i32) -> i32 {
|
fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
|
||||||
self.protected_prop + self.some_prop + arg + self.private_field
|
Ok(self.protected_prop
|
||||||
|
+ self.some_prop
|
||||||
|
+ arg
|
||||||
|
+ self.private_field
|
||||||
|
+ arg_maybe_default as i32)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn my_procedure(&mut self) {
|
||||||
|
self.protected_prop += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
Submodule native_api_1c_macro updated: e84ce2cdc5...7609711f02
@ -8,7 +8,7 @@ crate-type = ["cdylib"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
utf16_lit = "2.0"
|
utf16_lit = "2.0"
|
||||||
native_api_1c = "0.9.3"
|
native_api_1c = "0.10.1"
|
||||||
|
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
|
@ -1,21 +1,35 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use native_api_1c::native_api_1c_core::ffi::connection::Connection;
|
use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};
|
||||||
use native_api_1c::native_api_1c_macro::AddIn;
|
|
||||||
|
|
||||||
#[derive(AddIn)]
|
#[derive(AddIn)]
|
||||||
pub struct MyAddIn {
|
pub struct MyAddIn {
|
||||||
|
// соедиенение с 1С для вызова внешних событий
|
||||||
#[add_in_con]
|
#[add_in_con]
|
||||||
connection: Arc<Option<&'static Connection>>,
|
connection: Arc<Option<&'static Connection>>, // Arc для возможности многопоточности
|
||||||
|
|
||||||
|
// свойство, доступное для чтения и записи
|
||||||
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
|
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
|
||||||
pub some_prop: i32,
|
pub some_prop: i32,
|
||||||
|
|
||||||
|
// свойство, доступное только для чтения
|
||||||
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
|
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
|
||||||
pub protected_prop: i32,
|
pub protected_prop: i32,
|
||||||
|
|
||||||
|
// функция, принимающая один или два аргумента и возвращающая результат
|
||||||
|
// в 1С можно вызвать как:
|
||||||
|
// ОбъектКомпоненты.МояФункция(10, 15); // 2й аргумент = 15
|
||||||
|
// ОбъектКомпоненты.МояФункция(10); // 2й аргумент = 12 (значение по умолчанию)
|
||||||
|
// Если функция возвращает ошибку, но не паника, то в 1С будет вызвано исключение
|
||||||
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
|
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
|
||||||
pub my_function: fn(&Self, i32) -> i32,
|
#[arg(Int)]
|
||||||
#[add_in_func(name = "SumOfTwo", name_ru = "СуммаДвух")]
|
#[arg(Int, default = 12)]
|
||||||
pub sum_of_2: fn(&Self, i32, i32) -> String,
|
#[returns(Int, result)]
|
||||||
|
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
|
||||||
|
|
||||||
|
// Процедура, ничего не получающая, ничего не возвращающая
|
||||||
|
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
|
||||||
|
pub my_procedure: fn(&mut Self),
|
||||||
|
|
||||||
private_field: i32,
|
private_field: i32,
|
||||||
}
|
}
|
||||||
@ -27,16 +41,20 @@ impl MyAddIn {
|
|||||||
some_prop: 0,
|
some_prop: 0,
|
||||||
protected_prop: 50,
|
protected_prop: 50,
|
||||||
my_function: Self::my_function,
|
my_function: Self::my_function,
|
||||||
sum_of_2: Self::sum_of_2,
|
my_procedure: Self::my_procedure,
|
||||||
private_field: 100,
|
private_field: 100,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn my_function(&self, arg: i32) -> i32 {
|
fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
|
||||||
self.protected_prop + self.some_prop + arg + self.private_field
|
Ok(self.protected_prop
|
||||||
|
+ self.some_prop
|
||||||
|
+ arg
|
||||||
|
+ self.private_field
|
||||||
|
+ arg_maybe_default as i32)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sum_of_2(&self, arg1: i32, arg2: i32) -> String {
|
fn my_procedure(&mut self) {
|
||||||
format!("{}", arg1 + arg2)
|
self.protected_prop += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user