hotload 0.15.6

Zero cost hot update dynamic library; supporting DLL, SO
Documentation
# hotload

[![crates.io](https://crates.io/crates/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


| Feature                            | dlopen2    | [hotload]https://gitee.com/guoyucode/hotload | hot-lib-reloader |
|------------------------------------|------------|---------------------------------------------------------|-------------------------------------------------|
| 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)