https://github.com/cffi-rs/cffi
Safe* C foreign function interface for Rust, using proc macros and marshaling types.
https://github.com/cffi-rs/cffi
c cthulhu extern ffi marshal rust
Last synced: 11 months ago
JSON representation
Safe* C foreign function interface for Rust, using proc macros and marshaling types.
- Host: GitHub
- URL: https://github.com/cffi-rs/cffi
- Owner: cffi-rs
- License: apache-2.0
- Created: 2019-07-16T12:13:24.000Z (almost 7 years ago)
- Default Branch: main
- Last Pushed: 2024-05-04T14:08:42.000Z (about 2 years ago)
- Last Synced: 2025-07-12T05:05:13.498Z (11 months ago)
- Topics: c, cthulhu, extern, ffi, marshal, rust
- Language: Rust
- Homepage:
- Size: 201 KB
- Stars: 16
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
- Roadmap: ROADMAP.md
Awesome Lists containing this project
README
[](https://github.com/cffi-rs/cffi/actions)
[](https://docs.rs/cffi)
# cffi
Use the `#[cffi::marshal(...)]` proc macro to make unsafe C functions into much safer functions,
both for exporting interfaces and consuming functions from C libraries.
## Usage
See the documentation for the various marshallers available.
## Where is this used?
- [pahkat](https://github.com/divvun/pahkat) - a multi-platform package management framework
- [divvunspell](https://github.com/divvun/divvunspell) - a multi-platform highly efficient memory-mapping spell checking library
## Background and philosophy
We enforce the usage of `stdint.h` types on the C side to simplify the implementation on the Rust side.
Interesting reads:
- [Marshaling Data with Platform Invoke](https://docs.microsoft.com/en-us/dotnet/framework/interop/marshaling-data-with-platform-invoke) (.NET)
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.