# hotload
[
## Quick example
```rust
use dlopen2::wrapper::{Container, WrapperApi};
use hotload::types::Hotload;
// Generate the following rust calling methods
hotload::gen_rust_no_mangle!((MyApi, "../call_lib/src/lib.rs"));
// #[derive(WrapperApi)]
// struct MyApi {
// test_print: fn(msg: String),
// init_data: fn(msg: String),
// stop_runtime: fn(),
// }
fn main(){
let dll: Hotload<MyApi> = Hotload::new("../call_lib/target/release/call_lib.dll");
// "dll created" or "file rename to" is actively loaded
dll.init_load(|_, _| {}).unwrap();
let mut count = 0;
loop {
count += 1;
dll.test_print(format!("msg{count}"));
}
}
```
## Features
### Main features
* Zero cost hot update dynamic library; supporting DLL, SO
## Comparison with other libraries
| Basic functionality | Yes | Yes | Yes |
| Multiplatform | Yes | Yes | Yes |
| Dangling symbol prevention | Yes | Yes | Yes |
| Thread safety | Yes | Yes | Yes
| Loading of symbols into structures | Yes | Yes | Yes |
| Overhead | Minimal | Minimal | Minimal |
| Low-level, unsafe API | Yes | Yes | Yes |
| Object-oriented friendly | Yes | Yes | Yes |
| Load from the program itself | Yes | Yes | Yes |
| Obtaining address information (dladdr) | Yes | Yes | Yes |
| Auto reload | **No** | Yes | Yes |
| Is haved load new dll event | **No** | Yes | **No** |
| Zero cost, Is not lock | **No** | Yes | **No** |
| Generate rust call method | **No** | Yes | Yes |
## Usage
Cargo.toml:
```toml
[dependencies]
dlopen2 = "0.6"
hotload = "0.9"
```
## Documentation
[Cargo documentation](https://docs.rs/hotload)
## License
This code is licensed under the [MIT](./LICENSE) license.
## Changelog
[GitHub](https://gitee.com/guoyucode/hotload)
## Acknowledgement
Special thanks to [dlopen2](https://github.com/nagisa) and [hot-lib-reloader](https://crates.io/crates/hot-lib-reloader)