ReadMe for v1.8.0

This commit is contained in:
neuecc 2023-09-07 17:38:45 +09:00
parent 297da130fa
commit 6f4c59f928
5 changed files with 374 additions and 368 deletions

View File

@ -31,7 +31,7 @@ Install on `Cargo.toml` as `build-dependencies` and set up `bindgen::Builder` on
crate-type = ["cdylib"]
[build-dependencies]
csbindgen = "1.7.5"
csbindgen = "1.8.0"
```
### Rust to C#.
@ -479,6 +479,10 @@ Rust types will map these C# types.
| `*const *const T` | `T**` |
| `*mut *const T` | `T**` |
| `*const *mut T` | `T**` |
| `&T` | `T*` |
| `&mut T` | `T*` |
| `&&T` | `T**` |
| `&*mut T` | `T**` |
| `NonNull<T>` | `T*` |
| `Box<T>` | `T*` |
@ -552,42 +556,19 @@ internal unsafe partial struct MyIntVec3
It also supports unit struct, but there is no C# struct that is synonymous with Rust's unit struct (0 byte), so it cannot be materialized. Instead of using void*, it is recommended to use typed pointers.
```
// 0-byte
// 0-byte in Rust
#[repr(C)]
pub struct CounterContext;
pub struct MyContext;
```
```csharp
// 1-byte
// 1-byte in C#
[StructLayout(LayoutKind.Sequential)]
internal unsafe partial struct CounterContext
internal unsafe partial struct MyContext
{
}
```
```rust
// recommend to use as pointer, in C#, holds CounterContext*
#[no_mangle]
pub extern "C" fn create_counter_context() -> *mut CounterContext {
let ctx = Box::new(InternalCounterContext {
set: HashSet::new(),
});
Box::into_raw(ctx) as *mut CounterContext
}
#[no_mangle]
pub unsafe extern "C" fn counter_context_insert(context: *mut CounterContext, value: i32) {
let mut counter = Box::from_raw(context as *mut InternalCounterContext);
counter.set.insert(value);
Box::into_raw(counter);
}
#[no_mangle]
pub unsafe extern "C" fn destroy_counter_context(context: *mut CounterContext) {
_ = Box::from_raw(context as *mut InternalCounterContext);
}
```
### Union
`Union` will generate `[FieldOffset(0)]` struct.
@ -765,43 +746,47 @@ NativeMethods.delete_context(context);
You can also pass memory allocated by C# to Rust (use `fixed` or `GCHandle.Alloc(Pinned)`). The important thing is that memory allocated in Rust must release in Rust and memory allocated in C# must release in C#.
If you want to pass a non FFI Safe struct, cast it to `*mut c_void`. Then C# will treat it as a `void*`. csbindgen does not support Opaque Type. Additionally, by returning a unit struct instead of `c_void`, you can create a typed handler.
If you want to pass a non FFI Safe struct reference, csbindgen generates empty C# struct.
```rust
#[no_mangle]
pub extern "C" fn create_counter_context() -> *mut CounterContext {
let ctx = Box::new(InternalCounterContext {
let ctx = Box::new(CounterContext {
set: HashSet::new(),
});
Box::into_raw(ctx) as *mut c_void
Box::into_raw(ctx)
}
#[no_mangle]
pub unsafe extern "C" fn insert_counter_context(context: *mut CounterContext, value: i32) {
let mut counter = Box::from_raw(context as *mut InternalCounterContext);
let mut counter = Box::from_raw(context);
counter.set.insert(value);
Box::into_raw(counter);
}
#[no_mangle]
pub unsafe extern "C" fn delete_counter_context(context: *mut CounterContext) {
let counter = Box::from_raw(context as *mut InternalCounterContext);
let counter = Box::from_raw(context);
for value in counter.set.iter() {
println!("counter value: {}", value)
}
}
#[repr(C)]
pub struct CounterContext;
// no repr(C)
pub struct InternalCounterContext {
pub struct CounterContext {
pub set: HashSet<i32>,
}
```
```csharp
var ctx = NativeMethods.create_counter_context();
// csbindgen generates this handler type
[StructLayout(LayoutKind.Sequential)]
internal unsafe partial struct CounterContext
{
}
// You can hold pointer instance
CounterContext* ctx = NativeMethods.create_counter_context();
NativeMethods.insert_counter_context(ctx, 10);
NativeMethods.insert_counter_context(ctx, 20);

View File

@ -609,6 +609,38 @@ pub struct CallbackTable {
pub extern "C" fn reference_type(_a: &i32, _b: &*mut i32, _c: &[u8; 16], _d: &Context) {}
pub extern "C" fn reference_hogemoge1(_a : &mut i32, _b: &&i32){}
pub extern "C" fn reference_hogemoge2(_a : &mut i32, _b: &*mut i32){}
#[no_mangle]
pub extern "C" fn create_counter_context2() -> *mut CounterContext2 {
let ctx = Box::new(CounterContext2 {
set: HashSet::new(),
});
Box::into_raw(ctx)
}
#[no_mangle]
pub unsafe extern "C" fn insert_counter_context2(context: *mut CounterContext2, value: i32) {
let mut counter = Box::from_raw(context);
counter.set.insert(value);
Box::into_raw(counter);
}
#[no_mangle]
pub unsafe extern "C" fn delete_counter_context2(context: *mut CounterContext2) {
let counter = Box::from_raw(context);
for value in counter.set.iter() {
println!("counter value: {}", value)
}
}
// no repr(C)
pub struct CounterContext2 {
pub set: HashSet<i32>,
}
pub struct InternalHiddenContext {
pub a: i32
}

View File

@ -1,5 +1,34 @@
/* automatically generated by rust-bindgen 0.64.0 */
pub const _VCRT_COMPILER_PREPROCESSOR: u32 = 1;
pub const _SAL_VERSION: u32 = 20;
pub const __SAL_H_VERSION: u32 = 180000000;
pub const _USE_DECLSPECS_FOR_SAL: u32 = 0;
pub const _USE_ATTRIBUTES_FOR_SAL: u32 = 0;
pub const _CRT_PACKING: u32 = 8;
pub const _HAS_EXCEPTIONS: u32 = 1;
pub const _STL_LANG: u32 = 0;
pub const _HAS_CXX17: u32 = 0;
pub const _HAS_CXX20: u32 = 0;
pub const _HAS_CXX23: u32 = 0;
pub const _HAS_NODISCARD: u32 = 0;
pub const _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE: u32 = 1;
pub const _CRT_BUILD_DESKTOP_APP: u32 = 1;
pub const _ARGMAX: u32 = 100;
pub const _CRT_INT_MAX: u32 = 2147483647;
pub const _CRT_FUNCTIONS_REQUIRED: u32 = 1;
pub const _CRT_HAS_CXX17: u32 = 0;
pub const _CRT_HAS_C11: u32 = 1;
pub const _CRT_INTERNAL_NONSTDC_NAMES: u32 = 1;
pub const __STDC_SECURE_LIB__: u32 = 200411;
pub const __GOT_SECURE_LIB__: u32 = 200411;
pub const __STDC_WANT_SECURE_LIB__: u32 = 1;
pub const _SECURECRT_FILL_BUFFER_PATTERN: u32 = 254;
pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES: u32 = 0;
pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT: u32 = 0;
pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES: u32 = 1;
pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY: u32 = 0;
pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY: u32 = 0;
pub const LZ4_FREESTANDING: u32 = 0;
pub const LZ4_VERSION_MAJOR: u32 = 1;
pub const LZ4_VERSION_MINOR: u32 = 9;
@ -13,101 +42,10 @@ pub const LZ4_MAX_INPUT_SIZE: u32 = 2113929216;
pub const LZ4_HASHLOG: u32 = 12;
pub const LZ4_HASHTABLESIZE: u32 = 16384;
pub const LZ4_HASH_SIZE_U32: u32 = 4096;
pub const _STDINT_H: u32 = 1;
pub const _FEATURES_H: u32 = 1;
pub const _DEFAULT_SOURCE: u32 = 1;
pub const __GLIBC_USE_ISOC2X: u32 = 0;
pub const __USE_ISOC11: u32 = 1;
pub const __USE_ISOC99: u32 = 1;
pub const __USE_ISOC95: u32 = 1;
pub const __USE_POSIX_IMPLICITLY: u32 = 1;
pub const _POSIX_SOURCE: u32 = 1;
pub const _POSIX_C_SOURCE: u32 = 200809;
pub const __USE_POSIX: u32 = 1;
pub const __USE_POSIX2: u32 = 1;
pub const __USE_POSIX199309: u32 = 1;
pub const __USE_POSIX199506: u32 = 1;
pub const __USE_XOPEN2K: u32 = 1;
pub const __USE_XOPEN2K8: u32 = 1;
pub const _ATFILE_SOURCE: u32 = 1;
pub const __WORDSIZE: u32 = 64;
pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
pub const __SYSCALL_WORDSIZE: u32 = 64;
pub const __TIMESIZE: u32 = 64;
pub const __USE_MISC: u32 = 1;
pub const __USE_ATFILE: u32 = 1;
pub const __USE_FORTIFY_LEVEL: u32 = 0;
pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
pub const _STDC_PREDEF_H: u32 = 1;
pub const __STDC_IEC_559__: u32 = 1;
pub const __STDC_IEC_60559_BFP__: u32 = 201404;
pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
pub const __STDC_ISO_10646__: u32 = 201706;
pub const __GNU_LIBRARY__: u32 = 6;
pub const __GLIBC__: u32 = 2;
pub const __GLIBC_MINOR__: u32 = 35;
pub const _SYS_CDEFS_H: u32 = 1;
pub const __glibc_c99_flexarr_available: u32 = 1;
pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
pub const __HAVE_GENERIC_SELECTION: u32 = 1;
pub const __GLIBC_USE_LIB_EXT2: u32 = 0;
pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 0;
pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 0;
pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0;
pub const _BITS_TYPES_H: u32 = 1;
pub const _BITS_TYPESIZES_H: u32 = 1;
pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
pub const __INO_T_MATCHES_INO64_T: u32 = 1;
pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
pub const __STATFS_MATCHES_STATFS64: u32 = 1;
pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1;
pub const __FD_SETSIZE: u32 = 1024;
pub const _BITS_TIME64_H: u32 = 1;
pub const _BITS_WCHAR_H: u32 = 1;
pub const _BITS_STDINT_INTN_H: u32 = 1;
pub const _BITS_STDINT_UINTN_H: u32 = 1;
pub const INT8_MIN: i32 = -128;
pub const INT16_MIN: i32 = -32768;
pub const INT32_MIN: i32 = -2147483648;
pub const INT8_MAX: u32 = 127;
pub const INT16_MAX: u32 = 32767;
pub const INT32_MAX: u32 = 2147483647;
pub const UINT8_MAX: u32 = 255;
pub const UINT16_MAX: u32 = 65535;
pub const UINT32_MAX: u32 = 4294967295;
pub const INT_LEAST8_MIN: i32 = -128;
pub const INT_LEAST16_MIN: i32 = -32768;
pub const INT_LEAST32_MIN: i32 = -2147483648;
pub const INT_LEAST8_MAX: u32 = 127;
pub const INT_LEAST16_MAX: u32 = 32767;
pub const INT_LEAST32_MAX: u32 = 2147483647;
pub const UINT_LEAST8_MAX: u32 = 255;
pub const UINT_LEAST16_MAX: u32 = 65535;
pub const UINT_LEAST32_MAX: u32 = 4294967295;
pub const INT_FAST8_MIN: i32 = -128;
pub const INT_FAST16_MIN: i64 = -9223372036854775808;
pub const INT_FAST32_MIN: i64 = -9223372036854775808;
pub const INT_FAST8_MAX: u32 = 127;
pub const INT_FAST16_MAX: u64 = 9223372036854775807;
pub const INT_FAST32_MAX: u64 = 9223372036854775807;
pub const UINT_FAST8_MAX: u32 = 255;
pub const UINT_FAST16_MAX: i32 = -1;
pub const UINT_FAST32_MAX: i32 = -1;
pub const INTPTR_MIN: i64 = -9223372036854775808;
pub const INTPTR_MAX: u64 = 9223372036854775807;
pub const UINTPTR_MAX: i32 = -1;
pub const PTRDIFF_MIN: i64 = -9223372036854775808;
pub const PTRDIFF_MAX: u64 = 9223372036854775807;
pub const SIG_ATOMIC_MIN: i32 = -2147483648;
pub const SIG_ATOMIC_MAX: u32 = 2147483647;
pub const SIZE_MAX: i32 = -1;
pub const WCHAR_MIN: u32 = 0;
pub const WCHAR_MAX: u32 = 65535;
pub const WINT_MIN: u32 = 0;
pub const WINT_MAX: u32 = 4294967295;
pub const WINT_MAX: u32 = 65535;
pub const LZ4_STREAM_MINSIZE: u32 = 16416;
pub const LZ4_STREAMDECODE_MINSIZE: u32 = 32;
pub const LZ4HC_CLEVEL_MIN: u32 = 3;
@ -135,49 +73,210 @@ pub const XXH_VERSION_MAJOR: u32 = 0;
pub const XXH_VERSION_MINOR: u32 = 6;
pub const XXH_VERSION_RELEASE: u32 = 5;
pub const XXH_VERSION_NUMBER: u32 = 605;
pub type wchar_t = ::std::os::raw::c_int;
pub type va_list = *mut ::std::os::raw::c_char;
extern "C" {
pub fn __va_start(arg1: *mut *mut ::std::os::raw::c_char, ...);
}
pub type __vcrt_bool = bool;
pub type wchar_t = ::std::os::raw::c_ushort;
extern "C" {
pub fn __security_init_cookie();
}
extern "C" {
pub fn __security_check_cookie(_StackCookie: usize);
}
extern "C" {
pub fn __report_gsfailure(_StackCookie: usize) -> !;
}
extern "C" {
pub static mut __security_cookie: usize;
}
pub type __crt_bool = bool;
extern "C" {
pub fn _invalid_parameter_noinfo();
}
extern "C" {
pub fn _invalid_parameter_noinfo_noreturn() -> !;
}
extern "C" {
pub fn _invoke_watson(
_Expression: *const wchar_t,
_FunctionName: *const wchar_t,
_FileName: *const wchar_t,
_LineNo: ::std::os::raw::c_uint,
_Reserved: usize,
) -> !;
}
pub type errno_t = ::std::os::raw::c_int;
pub type wint_t = ::std::os::raw::c_ushort;
pub type wctype_t = ::std::os::raw::c_ushort;
pub type __time32_t = ::std::os::raw::c_long;
pub type __time64_t = ::std::os::raw::c_longlong;
#[repr(C)]
#[repr(align(16))]
#[derive(Debug, Copy, Clone)]
pub struct max_align_t {
pub __clang_max_align_nonce1: ::std::os::raw::c_longlong,
pub __bindgen_padding_0: u64,
pub __clang_max_align_nonce2: u128,
pub struct __crt_locale_data_public {
pub _locale_pctype: *const ::std::os::raw::c_ushort,
pub _locale_mb_cur_max: ::std::os::raw::c_int,
pub _locale_lc_codepage: ::std::os::raw::c_uint,
}
#[test]
fn bindgen_test_layout_max_align_t() {
const UNINIT: ::std::mem::MaybeUninit<max_align_t> = ::std::mem::MaybeUninit::uninit();
fn bindgen_test_layout___crt_locale_data_public() {
const UNINIT: ::std::mem::MaybeUninit<__crt_locale_data_public> =
::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<max_align_t>(),
32usize,
concat!("Size of: ", stringify!(max_align_t))
);
assert_eq!(
::std::mem::align_of::<max_align_t>(),
::std::mem::size_of::<__crt_locale_data_public>(),
16usize,
concat!("Alignment of ", stringify!(max_align_t))
concat!("Size of: ", stringify!(__crt_locale_data_public))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce1) as usize - ptr as usize },
::std::mem::align_of::<__crt_locale_data_public>(),
8usize,
concat!("Alignment of ", stringify!(__crt_locale_data_public))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr)._locale_pctype) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(max_align_t),
stringify!(__crt_locale_data_public),
"::",
stringify!(__clang_max_align_nonce1)
stringify!(_locale_pctype)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce2) as usize - ptr as usize },
16usize,
unsafe { ::std::ptr::addr_of!((*ptr)._locale_mb_cur_max) as usize - ptr as usize },
8usize,
concat!(
"Offset of field: ",
stringify!(max_align_t),
stringify!(__crt_locale_data_public),
"::",
stringify!(__clang_max_align_nonce2)
stringify!(_locale_mb_cur_max)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr)._locale_lc_codepage) as usize - ptr as usize },
12usize,
concat!(
"Offset of field: ",
stringify!(__crt_locale_data_public),
"::",
stringify!(_locale_lc_codepage)
)
);
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __crt_locale_pointers {
pub locinfo: *mut __crt_locale_data,
pub mbcinfo: *mut __crt_multibyte_data,
}
#[test]
fn bindgen_test_layout___crt_locale_pointers() {
const UNINIT: ::std::mem::MaybeUninit<__crt_locale_pointers> =
::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<__crt_locale_pointers>(),
16usize,
concat!("Size of: ", stringify!(__crt_locale_pointers))
);
assert_eq!(
::std::mem::align_of::<__crt_locale_pointers>(),
8usize,
concat!("Alignment of ", stringify!(__crt_locale_pointers))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).locinfo) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(__crt_locale_pointers),
"::",
stringify!(locinfo)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).mbcinfo) as usize - ptr as usize },
8usize,
concat!(
"Offset of field: ",
stringify!(__crt_locale_pointers),
"::",
stringify!(mbcinfo)
)
);
}
pub type _locale_t = *mut __crt_locale_pointers;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _Mbstatet {
pub _Wchar: ::std::os::raw::c_ulong,
pub _Byte: ::std::os::raw::c_ushort,
pub _State: ::std::os::raw::c_ushort,
}
#[test]
fn bindgen_test_layout__Mbstatet() {
const UNINIT: ::std::mem::MaybeUninit<_Mbstatet> = ::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<_Mbstatet>(),
8usize,
concat!("Size of: ", stringify!(_Mbstatet))
);
assert_eq!(
::std::mem::align_of::<_Mbstatet>(),
4usize,
concat!("Alignment of ", stringify!(_Mbstatet))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr)._Wchar) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(_Mbstatet),
"::",
stringify!(_Wchar)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr)._Byte) as usize - ptr as usize },
4usize,
concat!(
"Offset of field: ",
stringify!(_Mbstatet),
"::",
stringify!(_Byte)
)
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr)._State) as usize - ptr as usize },
6usize,
concat!(
"Offset of field: ",
stringify!(_Mbstatet),
"::",
stringify!(_State)
)
);
}
pub type mbstate_t = _Mbstatet;
pub type time_t = __time64_t;
pub type rsize_t = usize;
extern "C" {
pub fn _errno() -> *mut ::std::os::raw::c_int;
}
extern "C" {
pub fn _set_errno(_Value: ::std::os::raw::c_int) -> errno_t;
}
extern "C" {
pub fn _get_errno(_Value: *mut ::std::os::raw::c_int) -> errno_t;
}
extern "C" {
pub fn __threadid() -> ::std::os::raw::c_ulong;
}
extern "C" {
pub fn __threadhandle() -> usize;
}
extern "C" {
pub fn LZ4_versionNumber() -> ::std::os::raw::c_int;
@ -340,116 +439,24 @@ extern "C" {
dictSize: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
pub type __u_char = ::std::os::raw::c_uchar;
pub type __u_short = ::std::os::raw::c_ushort;
pub type __u_int = ::std::os::raw::c_uint;
pub type __u_long = ::std::os::raw::c_ulong;
pub type __int8_t = ::std::os::raw::c_schar;
pub type __uint8_t = ::std::os::raw::c_uchar;
pub type __int16_t = ::std::os::raw::c_short;
pub type __uint16_t = ::std::os::raw::c_ushort;
pub type __int32_t = ::std::os::raw::c_int;
pub type __uint32_t = ::std::os::raw::c_uint;
pub type __int64_t = ::std::os::raw::c_long;
pub type __uint64_t = ::std::os::raw::c_ulong;
pub type __int_least8_t = __int8_t;
pub type __uint_least8_t = __uint8_t;
pub type __int_least16_t = __int16_t;
pub type __uint_least16_t = __uint16_t;
pub type __int_least32_t = __int32_t;
pub type __uint_least32_t = __uint32_t;
pub type __int_least64_t = __int64_t;
pub type __uint_least64_t = __uint64_t;
pub type __quad_t = ::std::os::raw::c_long;
pub type __u_quad_t = ::std::os::raw::c_ulong;
pub type __intmax_t = ::std::os::raw::c_long;
pub type __uintmax_t = ::std::os::raw::c_ulong;
pub type __dev_t = ::std::os::raw::c_ulong;
pub type __uid_t = ::std::os::raw::c_uint;
pub type __gid_t = ::std::os::raw::c_uint;
pub type __ino_t = ::std::os::raw::c_ulong;
pub type __ino64_t = ::std::os::raw::c_ulong;
pub type __mode_t = ::std::os::raw::c_uint;
pub type __nlink_t = ::std::os::raw::c_ulong;
pub type __off_t = ::std::os::raw::c_long;
pub type __off64_t = ::std::os::raw::c_long;
pub type __pid_t = ::std::os::raw::c_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __fsid_t {
pub __val: [::std::os::raw::c_int; 2usize],
}
#[test]
fn bindgen_test_layout___fsid_t() {
const UNINIT: ::std::mem::MaybeUninit<__fsid_t> = ::std::mem::MaybeUninit::uninit();
let ptr = UNINIT.as_ptr();
assert_eq!(
::std::mem::size_of::<__fsid_t>(),
8usize,
concat!("Size of: ", stringify!(__fsid_t))
);
assert_eq!(
::std::mem::align_of::<__fsid_t>(),
4usize,
concat!("Alignment of ", stringify!(__fsid_t))
);
assert_eq!(
unsafe { ::std::ptr::addr_of!((*ptr).__val) as usize - ptr as usize },
0usize,
concat!(
"Offset of field: ",
stringify!(__fsid_t),
"::",
stringify!(__val)
)
);
}
pub type __clock_t = ::std::os::raw::c_long;
pub type __rlim_t = ::std::os::raw::c_ulong;
pub type __rlim64_t = ::std::os::raw::c_ulong;
pub type __id_t = ::std::os::raw::c_uint;
pub type __time_t = ::std::os::raw::c_long;
pub type __useconds_t = ::std::os::raw::c_uint;
pub type __suseconds_t = ::std::os::raw::c_long;
pub type __suseconds64_t = ::std::os::raw::c_long;
pub type __daddr_t = ::std::os::raw::c_int;
pub type __key_t = ::std::os::raw::c_int;
pub type __clockid_t = ::std::os::raw::c_int;
pub type __timer_t = *mut ::std::os::raw::c_void;
pub type __blksize_t = ::std::os::raw::c_long;
pub type __blkcnt_t = ::std::os::raw::c_long;
pub type __blkcnt64_t = ::std::os::raw::c_long;
pub type __fsblkcnt_t = ::std::os::raw::c_ulong;
pub type __fsblkcnt64_t = ::std::os::raw::c_ulong;
pub type __fsfilcnt_t = ::std::os::raw::c_ulong;
pub type __fsfilcnt64_t = ::std::os::raw::c_ulong;
pub type __fsword_t = ::std::os::raw::c_long;
pub type __ssize_t = ::std::os::raw::c_long;
pub type __syscall_slong_t = ::std::os::raw::c_long;
pub type __syscall_ulong_t = ::std::os::raw::c_ulong;
pub type __loff_t = __off64_t;
pub type __caddr_t = *mut ::std::os::raw::c_char;
pub type __intptr_t = ::std::os::raw::c_long;
pub type __socklen_t = ::std::os::raw::c_uint;
pub type __sig_atomic_t = ::std::os::raw::c_int;
pub type int_least8_t = __int_least8_t;
pub type int_least16_t = __int_least16_t;
pub type int_least32_t = __int_least32_t;
pub type int_least64_t = __int_least64_t;
pub type uint_least8_t = __uint_least8_t;
pub type uint_least16_t = __uint_least16_t;
pub type uint_least32_t = __uint_least32_t;
pub type uint_least64_t = __uint_least64_t;
pub type int_least8_t = ::std::os::raw::c_schar;
pub type int_least16_t = ::std::os::raw::c_short;
pub type int_least32_t = ::std::os::raw::c_int;
pub type int_least64_t = ::std::os::raw::c_longlong;
pub type uint_least8_t = ::std::os::raw::c_uchar;
pub type uint_least16_t = ::std::os::raw::c_ushort;
pub type uint_least32_t = ::std::os::raw::c_uint;
pub type uint_least64_t = ::std::os::raw::c_ulonglong;
pub type int_fast8_t = ::std::os::raw::c_schar;
pub type int_fast16_t = ::std::os::raw::c_long;
pub type int_fast32_t = ::std::os::raw::c_long;
pub type int_fast64_t = ::std::os::raw::c_long;
pub type int_fast16_t = ::std::os::raw::c_int;
pub type int_fast32_t = ::std::os::raw::c_int;
pub type int_fast64_t = ::std::os::raw::c_longlong;
pub type uint_fast8_t = ::std::os::raw::c_uchar;
pub type uint_fast16_t = ::std::os::raw::c_ulong;
pub type uint_fast32_t = ::std::os::raw::c_ulong;
pub type uint_fast64_t = ::std::os::raw::c_ulong;
pub type intmax_t = __intmax_t;
pub type uintmax_t = __uintmax_t;
pub type uint_fast16_t = ::std::os::raw::c_uint;
pub type uint_fast32_t = ::std::os::raw::c_uint;
pub type uint_fast64_t = ::std::os::raw::c_ulonglong;
pub type intmax_t = ::std::os::raw::c_longlong;
pub type uintmax_t = ::std::os::raw::c_ulonglong;
pub type LZ4_i8 = i8;
pub type LZ4_byte = u8;
pub type LZ4_u16 = u16;
@ -1239,19 +1246,19 @@ pub const LZ4F_blockSizeID_t_LZ4F_max64KB: LZ4F_blockSizeID_t = 4;
pub const LZ4F_blockSizeID_t_LZ4F_max256KB: LZ4F_blockSizeID_t = 5;
pub const LZ4F_blockSizeID_t_LZ4F_max1MB: LZ4F_blockSizeID_t = 6;
pub const LZ4F_blockSizeID_t_LZ4F_max4MB: LZ4F_blockSizeID_t = 7;
pub type LZ4F_blockSizeID_t = ::std::os::raw::c_uint;
pub type LZ4F_blockSizeID_t = ::std::os::raw::c_int;
pub const LZ4F_blockMode_t_LZ4F_blockLinked: LZ4F_blockMode_t = 0;
pub const LZ4F_blockMode_t_LZ4F_blockIndependent: LZ4F_blockMode_t = 1;
pub type LZ4F_blockMode_t = ::std::os::raw::c_uint;
pub type LZ4F_blockMode_t = ::std::os::raw::c_int;
pub const LZ4F_contentChecksum_t_LZ4F_noContentChecksum: LZ4F_contentChecksum_t = 0;
pub const LZ4F_contentChecksum_t_LZ4F_contentChecksumEnabled: LZ4F_contentChecksum_t = 1;
pub type LZ4F_contentChecksum_t = ::std::os::raw::c_uint;
pub type LZ4F_contentChecksum_t = ::std::os::raw::c_int;
pub const LZ4F_blockChecksum_t_LZ4F_noBlockChecksum: LZ4F_blockChecksum_t = 0;
pub const LZ4F_blockChecksum_t_LZ4F_blockChecksumEnabled: LZ4F_blockChecksum_t = 1;
pub type LZ4F_blockChecksum_t = ::std::os::raw::c_uint;
pub type LZ4F_blockChecksum_t = ::std::os::raw::c_int;
pub const LZ4F_frameType_t_LZ4F_frame: LZ4F_frameType_t = 0;
pub const LZ4F_frameType_t_LZ4F_skippableFrame: LZ4F_frameType_t = 1;
pub type LZ4F_frameType_t = ::std::os::raw::c_uint;
pub type LZ4F_frameType_t = ::std::os::raw::c_int;
#[doc = " LZ4F_frameInfo_t :\n makes it possible to set or read frame parameters.\n Structure must be first init to 0, using memset() or LZ4F_INIT_FRAMEINFO,\n setting all parameters to default.\n It's then possible to update selectively some parameters"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
@ -1659,7 +1666,7 @@ extern "C" {
}
pub const XXH_errorcode_XXH_OK: XXH_errorcode = 0;
pub const XXH_errorcode_XXH_ERROR: XXH_errorcode = 1;
pub type XXH_errorcode = ::std::os::raw::c_uint;
pub type XXH_errorcode = ::std::os::raw::c_int;
extern "C" {
pub fn XXH_versionNumber() -> ::std::os::raw::c_uint;
}
@ -1813,3 +1820,13 @@ extern "C" {
extern "C" {
pub fn XXH64_hashFromCanonical(src: *const XXH64_canonical_t) -> XXH64_hash_t;
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __crt_locale_data {
pub _address: u8,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __crt_multibyte_data {
pub _address: u8,
}

View File

@ -176,10 +176,24 @@ namespace CsBindgen
[DllImport(__DllName, EntryPoint = "call_bindgen_lz4", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void call_bindgen_lz4();
[DllImport(__DllName, EntryPoint = "reference_type", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void reference_type(int* _a, int** _b, void/* byte[] */* _c, Context* _d);
[DllImport(__DllName, EntryPoint = "reference_hogemoge1", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void reference_hogemoge1(int* _a, int** _b);
[DllImport(__DllName, EntryPoint = "reference_hogemoge2", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void reference_hogemoge2(int* _a, int** _b);
[DllImport(__DllName, EntryPoint = "create_counter_context2", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern CounterContext2* create_counter_context2();
[DllImport(__DllName, EntryPoint = "insert_counter_context2", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void insert_counter_context2(CounterContext2* context, int value);
[DllImport(__DllName, EntryPoint = "delete_counter_context2", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void delete_counter_context2(CounterContext2* context);
[DllImport(__DllName, EntryPoint = "init_treat_as_empty_struct_context", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void init_treat_as_empty_struct_context(TreatAsEmptyStruct** _out);
@ -187,7 +201,6 @@ namespace CsBindgen
public static extern void free_treat_as_empty_struct_context(TreatAsEmptyStruct* _src);
}
[StructLayout(LayoutKind.Sequential)]
@ -271,6 +284,11 @@ namespace CsBindgen
public delegate* unmanaged[Cdecl]<int, int> foobar;
}
[StructLayout(LayoutKind.Sequential)]
internal unsafe partial struct CounterContext2
{
}
[StructLayout(LayoutKind.Sequential)]
internal unsafe partial struct TreatAsEmptyStruct
{

View File

@ -19,6 +19,35 @@ namespace CsBindgen
#endif
public const uint _VCRT_COMPILER_PREPROCESSOR = 1;
public const uint _SAL_VERSION = 20;
public const uint __SAL_H_VERSION = 180000000;
public const uint _USE_DECLSPECS_FOR_SAL = 0;
public const uint _USE_ATTRIBUTES_FOR_SAL = 0;
public const uint _CRT_PACKING = 8;
public const uint _HAS_EXCEPTIONS = 1;
public const uint _STL_LANG = 0;
public const uint _HAS_CXX17 = 0;
public const uint _HAS_CXX20 = 0;
public const uint _HAS_CXX23 = 0;
public const uint _HAS_NODISCARD = 0;
public const uint _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE = 1;
public const uint _CRT_BUILD_DESKTOP_APP = 1;
public const uint _ARGMAX = 100;
public const uint _CRT_INT_MAX = 2147483647;
public const uint _CRT_FUNCTIONS_REQUIRED = 1;
public const uint _CRT_HAS_CXX17 = 0;
public const uint _CRT_HAS_C11 = 1;
public const uint _CRT_INTERNAL_NONSTDC_NAMES = 1;
public const uint __STDC_SECURE_LIB__ = 200411;
public const uint __GOT_SECURE_LIB__ = 200411;
public const uint __STDC_WANT_SECURE_LIB__ = 1;
public const uint _SECURECRT_FILL_BUFFER_PATTERN = 254;
public const uint _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES = 0;
public const uint _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT = 0;
public const uint _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES = 1;
public const uint _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY = 0;
public const uint _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY = 0;
public const uint LZ4_FREESTANDING = 0;
public const uint LZ4_VERSION_MAJOR = 1;
public const uint LZ4_VERSION_MINOR = 9;
@ -32,85 +61,10 @@ namespace CsBindgen
public const uint LZ4_HASHLOG = 12;
public const uint LZ4_HASHTABLESIZE = 16384;
public const uint LZ4_HASH_SIZE_U32 = 4096;
public const uint _STDINT_H = 1;
public const uint _FEATURES_H = 1;
public const uint _DEFAULT_SOURCE = 1;
public const uint __GLIBC_USE_ISOC2X = 0;
public const uint __USE_ISOC11 = 1;
public const uint __USE_ISOC99 = 1;
public const uint __USE_ISOC95 = 1;
public const uint __USE_POSIX_IMPLICITLY = 1;
public const uint _POSIX_SOURCE = 1;
public const uint _POSIX_C_SOURCE = 200809;
public const uint __USE_POSIX = 1;
public const uint __USE_POSIX2 = 1;
public const uint __USE_POSIX199309 = 1;
public const uint __USE_POSIX199506 = 1;
public const uint __USE_XOPEN2K = 1;
public const uint __USE_XOPEN2K8 = 1;
public const uint _ATFILE_SOURCE = 1;
public const uint __WORDSIZE = 64;
public const uint __WORDSIZE_TIME64_COMPAT32 = 1;
public const uint __SYSCALL_WORDSIZE = 64;
public const uint __TIMESIZE = 64;
public const uint __USE_MISC = 1;
public const uint __USE_ATFILE = 1;
public const uint __USE_FORTIFY_LEVEL = 0;
public const uint __GLIBC_USE_DEPRECATED_GETS = 0;
public const uint __GLIBC_USE_DEPRECATED_SCANF = 0;
public const uint _STDC_PREDEF_H = 1;
public const uint __STDC_IEC_559__ = 1;
public const uint __STDC_IEC_60559_BFP__ = 201404;
public const uint __STDC_IEC_559_COMPLEX__ = 1;
public const uint __STDC_IEC_60559_COMPLEX__ = 201404;
public const uint __STDC_ISO_10646__ = 201706;
public const uint __GNU_LIBRARY__ = 6;
public const uint __GLIBC__ = 2;
public const uint __GLIBC_MINOR__ = 35;
public const uint _SYS_CDEFS_H = 1;
public const uint __glibc_c99_flexarr_available = 1;
public const uint __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI = 0;
public const uint __HAVE_GENERIC_SELECTION = 1;
public const uint __GLIBC_USE_LIB_EXT2 = 0;
public const uint __GLIBC_USE_IEC_60559_BFP_EXT = 0;
public const uint __GLIBC_USE_IEC_60559_BFP_EXT_C2X = 0;
public const uint __GLIBC_USE_IEC_60559_EXT = 0;
public const uint __GLIBC_USE_IEC_60559_FUNCS_EXT = 0;
public const uint __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X = 0;
public const uint __GLIBC_USE_IEC_60559_TYPES_EXT = 0;
public const uint _BITS_TYPES_H = 1;
public const uint _BITS_TYPESIZES_H = 1;
public const uint __OFF_T_MATCHES_OFF64_T = 1;
public const uint __INO_T_MATCHES_INO64_T = 1;
public const uint __RLIM_T_MATCHES_RLIM64_T = 1;
public const uint __STATFS_MATCHES_STATFS64 = 1;
public const uint __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 = 1;
public const uint __FD_SETSIZE = 1024;
public const uint _BITS_TIME64_H = 1;
public const uint _BITS_WCHAR_H = 1;
public const uint _BITS_STDINT_INTN_H = 1;
public const uint _BITS_STDINT_UINTN_H = 1;
public const uint INT8_MAX = 127;
public const uint INT16_MAX = 32767;
public const uint INT32_MAX = 2147483647;
public const uint UINT8_MAX = 255;
public const uint UINT16_MAX = 65535;
public const uint UINT32_MAX = 4294967295;
public const uint INT_LEAST8_MAX = 127;
public const uint INT_LEAST16_MAX = 32767;
public const uint INT_LEAST32_MAX = 2147483647;
public const uint UINT_LEAST8_MAX = 255;
public const uint UINT_LEAST16_MAX = 65535;
public const uint UINT_LEAST32_MAX = 4294967295;
public const uint INT_FAST8_MAX = 127;
public const ulong INT_FAST16_MAX = 9223372036854775807;
public const ulong INT_FAST32_MAX = 9223372036854775807;
public const uint UINT_FAST8_MAX = 255;
public const ulong INTPTR_MAX = 9223372036854775807;
public const ulong PTRDIFF_MAX = 9223372036854775807;
public const uint SIG_ATOMIC_MAX = 2147483647;
public const uint WCHAR_MIN = 0;
public const uint WCHAR_MAX = 65535;
public const uint WINT_MIN = 0;
public const uint WINT_MAX = 4294967295;
public const uint WINT_MAX = 65535;
public const uint LZ4_STREAM_MINSIZE = 16416;
public const uint LZ4_STREAMDECODE_MINSIZE = 32;
public const uint LZ4HC_CLEVEL_MIN = 3;
@ -138,21 +92,21 @@ namespace CsBindgen
public const uint XXH_VERSION_MINOR = 6;
public const uint XXH_VERSION_RELEASE = 5;
public const uint XXH_VERSION_NUMBER = 605;
public const uint LZ4F_blockSizeID_t_LZ4F_default = 0;
public const uint LZ4F_blockSizeID_t_LZ4F_max64KB = 4;
public const uint LZ4F_blockSizeID_t_LZ4F_max256KB = 5;
public const uint LZ4F_blockSizeID_t_LZ4F_max1MB = 6;
public const uint LZ4F_blockSizeID_t_LZ4F_max4MB = 7;
public const uint LZ4F_blockMode_t_LZ4F_blockLinked = 0;
public const uint LZ4F_blockMode_t_LZ4F_blockIndependent = 1;
public const uint LZ4F_contentChecksum_t_LZ4F_noContentChecksum = 0;
public const uint LZ4F_contentChecksum_t_LZ4F_contentChecksumEnabled = 1;
public const uint LZ4F_blockChecksum_t_LZ4F_noBlockChecksum = 0;
public const uint LZ4F_blockChecksum_t_LZ4F_blockChecksumEnabled = 1;
public const uint LZ4F_frameType_t_LZ4F_frame = 0;
public const uint LZ4F_frameType_t_LZ4F_skippableFrame = 1;
public const uint XXH_errorcode_XXH_OK = 0;
public const uint XXH_errorcode_XXH_ERROR = 1;
public const int LZ4F_blockSizeID_t_LZ4F_default = 0;
public const int LZ4F_blockSizeID_t_LZ4F_max64KB = 4;
public const int LZ4F_blockSizeID_t_LZ4F_max256KB = 5;
public const int LZ4F_blockSizeID_t_LZ4F_max1MB = 6;
public const int LZ4F_blockSizeID_t_LZ4F_max4MB = 7;
public const int LZ4F_blockMode_t_LZ4F_blockLinked = 0;
public const int LZ4F_blockMode_t_LZ4F_blockIndependent = 1;
public const int LZ4F_contentChecksum_t_LZ4F_noContentChecksum = 0;
public const int LZ4F_contentChecksum_t_LZ4F_contentChecksumEnabled = 1;
public const int LZ4F_blockChecksum_t_LZ4F_noBlockChecksum = 0;
public const int LZ4F_blockChecksum_t_LZ4F_blockChecksumEnabled = 1;
public const int LZ4F_frameType_t_LZ4F_frame = 0;
public const int LZ4F_frameType_t_LZ4F_skippableFrame = 1;
public const int XXH_errorcode_XXH_OK = 0;
public const int XXH_errorcode_XXH_ERROR = 1;
[DllImport(__DllName, EntryPoint = "csbindgen_LZ4_versionNumber", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
@ -538,13 +492,13 @@ namespace CsBindgen
[StructLayout(LayoutKind.Sequential)]
public unsafe partial struct LZ4F_frameInfo_t
{
public uint blockSizeID;
public uint blockMode;
public uint contentChecksumFlag;
public uint frameType;
public int blockSizeID;
public int blockMode;
public int contentChecksumFlag;
public int frameType;
public ulong contentSize;
public uint dictID;
public uint blockChecksumFlag;
public int blockChecksumFlag;
}
[StructLayout(LayoutKind.Sequential)]