mirror of
https://github.com/Sarsoo/csbindgen.git
synced 2024-12-23 06:56:27 +00:00
format rust -> rust generated code
This commit is contained in:
parent
2ff100f718
commit
4dba240d2b
34
csbindgen-tests/build.rs
vendored
34
csbindgen-tests/build.rs
vendored
@ -40,23 +40,23 @@ fn main() {
|
|||||||
// .generate()?
|
// .generate()?
|
||||||
// .write_to_file("src/bullet3.rs")?;
|
// .write_to_file("src/bullet3.rs")?;
|
||||||
|
|
||||||
// csbindgen::Builder::default()
|
csbindgen::Builder::default()
|
||||||
// .input_bindgen_file("src/lz4.rs")
|
.input_bindgen_file("src/lz4.rs")
|
||||||
// .method_filter(|x| { !x.starts_with("_") && !x.starts_with("XXH") } )
|
.method_filter(|x| { x.starts_with("LZ4")} )
|
||||||
// .rust_method_prefix("csbindgen_")
|
.rust_method_prefix("csbindgen_")
|
||||||
// .rust_file_header("use super::lz4;")
|
.rust_file_header("use super::lz4;")
|
||||||
// .rust_method_type_path("lz4")
|
.rust_method_type_path("lz4")
|
||||||
// .csharp_class_name("LibLz4")
|
.csharp_class_name("LibLz4")
|
||||||
// .csharp_namespace("CsBindgen")
|
.csharp_namespace("CsBindgen")
|
||||||
// .csharp_dll_name("csbindgen_tests")
|
.csharp_dll_name("csbindgen_tests")
|
||||||
// .csharp_dll_name_if("UNITY_IOS && !UNITY_EDITOR", "__Internal")
|
.csharp_dll_name_if("UNITY_IOS && !UNITY_EDITOR", "__Internal")
|
||||||
// .csharp_entry_point_prefix("csbindgen_")
|
.csharp_entry_point_prefix("csbindgen_")
|
||||||
// .csharp_method_prefix("")
|
.csharp_method_prefix("")
|
||||||
// .csharp_class_accessibility("public")
|
.csharp_class_accessibility("public")
|
||||||
// .csharp_c_long_convert("int")
|
.csharp_c_long_convert("int")
|
||||||
// .csharp_c_ulong_convert("uint")
|
.csharp_c_ulong_convert("uint")
|
||||||
// .generate_to_file("src/lz4_ffi.rs", "../dotnet-sandbox/lz4_bindgen.cs")
|
.generate_to_file("src/lz4_ffi.rs", "../dotnet-sandbox/lz4_bindgen.cs")
|
||||||
// .unwrap();
|
.unwrap();
|
||||||
|
|
||||||
csbindgen::Builder::default()
|
csbindgen::Builder::default()
|
||||||
.input_extern_file("src/lib.rs")
|
.input_extern_file("src/lib.rs")
|
||||||
|
36
csbindgen-tests/src/lib.rs
vendored
36
csbindgen-tests/src/lib.rs
vendored
@ -1,3 +1,5 @@
|
|||||||
|
use std::io::Bytes;
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
@ -14,15 +16,43 @@ pub extern "C" fn my_add(x: i32, y: i32) -> i32 {
|
|||||||
x + y
|
x + y
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn my_bool(x: bool, y: bool, z: bool, xr: *mut bool, yr: *mut bool, zr: *mut bool) -> bool {
|
pub extern "C" fn my_bool(
|
||||||
|
x: bool,
|
||||||
|
y: bool,
|
||||||
|
z: bool,
|
||||||
|
xr: *mut bool,
|
||||||
|
yr: *mut bool,
|
||||||
|
zr: *mut bool,
|
||||||
|
) -> bool {
|
||||||
unsafe {
|
unsafe {
|
||||||
*xr = x;
|
*xr = x;
|
||||||
*yr = y;
|
*yr = y;
|
||||||
*zr = z;
|
*zr = z;
|
||||||
true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn new(x: *mut *mut Vec<u8>) {
|
||||||
|
let v = Box::new(Vec::new());
|
||||||
|
*x = Box::into_raw(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn unsafe_return_string() -> *const u8 {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub unsafe extern "C" fn unsafe_return_string2() -> *const u8 {
|
||||||
|
todo!();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn unsafe_destroy_string(s: *mut String) {
|
||||||
|
unsafe { Box::from_raw(s) };
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
546
csbindgen-tests/src/lz4_ffi.rs
vendored
546
csbindgen-tests/src/lz4_ffi.rs
vendored
File diff suppressed because it is too large
Load Diff
@ -46,15 +46,13 @@ pub fn emit_rust_method(list: &Vec<ExternMethod>, options: &BindgenOptions) -> S
|
|||||||
let template = format!(
|
let template = format!(
|
||||||
"
|
"
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern \"C\" fn {method_prefix}{method_name}(
|
pub unsafe extern \"C\" fn {method_prefix}{method_name}(
|
||||||
{parameters}
|
{parameters}
|
||||||
){return_line}
|
){return_line}
|
||||||
{{
|
{{
|
||||||
unsafe {{
|
{method_type_path2}{method_name}(
|
||||||
return {method_type_path2}{method_name}(
|
|
||||||
{parameter_only_names}
|
{parameter_only_names}
|
||||||
)
|
)
|
||||||
}}
|
|
||||||
}}
|
}}
|
||||||
"
|
"
|
||||||
);
|
);
|
||||||
|
@ -111,6 +111,7 @@ impl RustType {
|
|||||||
fn convert_type_name(type_name: &str, options: &BindgenOptions) -> String {
|
fn convert_type_name(type_name: &str, options: &BindgenOptions) -> String {
|
||||||
let name = match type_name {
|
let name = match type_name {
|
||||||
// std::os::raw https://doc.rust-lang.org/std/os/raw/index.html
|
// std::os::raw https://doc.rust-lang.org/std/os/raw/index.html
|
||||||
|
// std::ffi::raw https://doc.rust-lang.org/core/ffi/index.html
|
||||||
"c_char" => "byte",
|
"c_char" => "byte",
|
||||||
"c_schar" => "sbyte",
|
"c_schar" => "sbyte",
|
||||||
"c_uchar" => "byte",
|
"c_uchar" => "byte",
|
||||||
@ -125,6 +126,7 @@ impl RustType {
|
|||||||
"c_float" => "float",
|
"c_float" => "float",
|
||||||
"c_double" => "double",
|
"c_double" => "double",
|
||||||
"c_void" => "void",
|
"c_void" => "void",
|
||||||
|
"CString" => "sbyte",
|
||||||
// rust primitives
|
// rust primitives
|
||||||
"i8" => "sbyte",
|
"i8" => "sbyte",
|
||||||
"i16" => "short",
|
"i16" => "short",
|
||||||
|
24
dotnet-sandbox/Program.cs
vendored
24
dotnet-sandbox/Program.cs
vendored
@ -1,14 +1,28 @@
|
|||||||
// See https://aka.ms/new-console-template for more information
|
|
||||||
|
|
||||||
|
// See https://aka.ms/new-console-template for more information
|
||||||
//using Csbindgen;
|
//using Csbindgen;
|
||||||
using CsBindgen;
|
using CsBindgen;
|
||||||
|
using System.Buffers.Text;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsafe
|
unsafe
|
||||||
{
|
{
|
||||||
var a = false;
|
var a = false;
|
||||||
var b = false;
|
var b = false;
|
||||||
var c = false;
|
var c = false;
|
||||||
|
Console.WriteLine(Encoding.Default);
|
||||||
|
|
||||||
|
|
||||||
|
var p = LibRust.unsafe_return_string();
|
||||||
|
|
||||||
|
var s = Encoding.UTF8.GetString(p, 5);
|
||||||
|
Console.WriteLine(s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -33,4 +47,12 @@ public static unsafe partial class LibraryImportNativeMethods
|
|||||||
public static partial bool my_bool([MarshalAs(UnmanagedType.U1)] bool x, [MarshalAs(UnmanagedType.U1)] bool y, [MarshalAs(UnmanagedType.U1)] bool z, bool* xr, bool* yr, bool* zr);
|
public static partial bool my_bool([MarshalAs(UnmanagedType.U1)] bool x, [MarshalAs(UnmanagedType.U1)] bool y, [MarshalAs(UnmanagedType.U1)] bool z, bool* xr, bool* yr, bool* zr);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[LibraryImport(__DllName)]
|
||||||
|
public static partial void foo(Foo f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct Foo
|
||||||
|
{
|
||||||
|
[MarshalAs(UnmanagedType.U1)] public bool A;
|
||||||
}
|
}
|
3
dotnet-sandbox/asm.cs
vendored
Normal file
3
dotnet-sandbox/asm.cs
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
[assembly:DisableRuntimeMarshalling()]
|
9
dotnet-sandbox/method_call.cs
vendored
9
dotnet-sandbox/method_call.cs
vendored
@ -18,6 +18,15 @@ namespace CsBindgen
|
|||||||
[return: MarshalAs(UnmanagedType.U1)]
|
[return: MarshalAs(UnmanagedType.U1)]
|
||||||
public static extern bool my_bool([MarshalAs(UnmanagedType.U1)] bool x, [MarshalAs(UnmanagedType.U1)] bool y, [MarshalAs(UnmanagedType.U1)] bool z, bool* xr, bool* yr, bool* zr);
|
public static extern bool my_bool([MarshalAs(UnmanagedType.U1)] bool x, [MarshalAs(UnmanagedType.U1)] bool y, [MarshalAs(UnmanagedType.U1)] bool z, bool* xr, bool* yr, bool* zr);
|
||||||
|
|
||||||
|
[DllImport(__DllName, EntryPoint = "unsafe_return_string", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern byte* unsafe_return_string();
|
||||||
|
|
||||||
|
[DllImport(__DllName, EntryPoint = "unsafe_return_string2", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern byte* unsafe_return_string2();
|
||||||
|
|
||||||
|
[DllImport(__DllName, EntryPoint = "unsafe_destroy_string", CallingConvention = CallingConvention.Cdecl)]
|
||||||
|
public static extern void unsafe_destroy_string(String* s);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user