9 个版本
0.10.7 | 2023年11月2日 |
---|---|
0.10.6 |
|
0.10.5 | 2023年9月1日 |
0.10.3 | 2023年8月29日 |
0.9.3 | 2023年8月10日 |
#61 in #native
118 每月下载量
63KB
1K SLoC
俄语使用指南可在此查看 此处,并可以就使用提出问题,但请不要在那里留下有关错误的评论,因为那里很难讨论。最好在此存储库中创建 issue。
为简单 1C:Enterprise 平台 Native API 组件开发提供的库,源于此 medigor/example-native-api-rs 的发现
存储库已在 Linux 和 Windows 上进行测试。它也应该在 MacOS 上运行,但没有进行测试。
结构
库分为两个子模块
native_api_1c_core
描述了实现 1C:Enterprise Native API 所需的所有内容native_api_1c_macro
提供了一个工具,用于简化组件实现,负责处理native_api_1c_core::interface::AddInWrapper
属性实现
用法
属性 #[add_in_prop(...)]
name
- 1C 中的属性名称name_ru
- 1C 中的俄语属性名称readable
- 属性可以从 1C 中读取writable
- 属性可以从 1C 中写入
支持的属性类型:i32
,f64
,bool
,String
函数或过程 #[add_in_func(...)]
name
- 1C 中的属性名称name_ru
- 1C 中的俄语属性名称
输入参数,#[arg(...)]
,对于每种参数类型必须设置,其中之一
Int
-i32
Float
-f64
Bool
-bool
Str
-String
Date
-chrono::DateTime<chrono::FixedOffset>
Blob
-Vec<u8>
返回值,#[returns(...)]
类型必须设置,可以是以下之一
Int
-i32
Float
-f64
Bool
-bool
Str
-String
Date
-chrono::DateTime<chrono::FixedOffset>
Blob
-Vec<u8>
None
-()
此外,还可以使用Result<T, ()>
,其中T
是上述之一。在这种情况下,必须在#[returns(...)]
属性中设置result
:对于Result<i32, ()>
,则为#[returns(Int, result)]
示例
# 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.3"
// src/lib.rs
use std::sync::Arc;
use native_api_1c::{native_api_1c_core::ffi::connection::Connection, native_api_1c_macro::AddIn};
#[derive(AddIn)]
pub struct MyAddIn {
/// connection with 1C, used for calling events
/// Arc is used to allow multiple threads to access the connection
#[add_in_con]
connection: Arc<Option<&'static Connection>>,
/// Property, readable and writable from 1C
#[add_in_prop(name = "MyProp", name_ru = "МоеСвойство", readable, writable)]
pub some_prop: i32,
/// Property, readable from 1C but not writable
#[add_in_prop(name = "ProtectedProp", name_ru = "ЗащищенноеСвойство", readable)]
pub protected_prop: i32,
/// Function, taking one or two arguments and returning a result
/// In 1C it can be called as:
/// ComponentObject.MyFunction(10, 15); // 2nd argument = 15
/// ComponentObject.MyFunction(10); // 2nd argument = 12 (default value)
/// If function returns an error, but does not panic, then 1C will throw an exception
#[add_in_func(name = "MyFunction", name_ru = "МояФункция")]
#[arg(Int)]
#[arg(Int, default = 12)]
#[returns(Int, result)]
pub my_function: fn(&Self, i32, i64) -> Result<i32, ()>,
/// Function, taking no arguments and returning nothing
#[add_in_func(name = "MyProcedure", name_ru = "МояПроцедура")]
pub my_procedure: fn(&mut Self),
/// Private field, not visible from 1C
private_field: i32,
}
impl MyAddIn {
pub fn new() -> Self {
Self {
connection: Arc::new(None),
some_prop: 0,
protected_prop: 50,
my_function: Self::my_function,
my_procedure: Self::my_procedure,
private_field: 100,
}
}
fn my_function(&self, arg: i32, arg_maybe_default: i64) -> Result<i32, ()> {
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;
}
}
依赖项
~1.3–2MB
~36K SLoC