文中所有的程序运行环境为:windows 10 64bit,Net 5.0,Rust 1.51;乌龙哈里 2021-05-05
接上文《C# 调用 Rust 编写的 dll 之一:创建 dll》
rust lib.rs 中写入
#[no_mangle]//不写这个会把函数名编译成其他乱七八糟的 pub extern fn input_int(n:i32){ println!("rust dll get i32: {}",n); }
c# 调用
[DllImport("D:\\LabRust\\Learn\\ln_dll\\target\\release\\rustdll.dll", EntryPoint = "input_int", CallingConvention = CallingConvention.Cdecl)] public static extern void InputInt(int n); static void TestInputInt(int n) { InputInt(n); }
在 main() 中修改:
static void Main(string[] args) { //TestHelloRust(); TestInputInt(100); Console.WriteLine("Hello C# !"); Console.Read(); }
结果:
/* rust dll get i32: 100 Hello C# ! */
rust 写入函数:
#[no_mangle]//不写这个会把函数名编译成其他乱七八糟的 pub extern fn output_int(n:i32)->i32{ println!("Rust Dll get i32: {}",n); n+100 }
c# 调用:
[DllImport("D:\\LabRust\\Learn\\ln_dll\\target\\release\\rustdll.dll", EntryPoint = "output_int", CallingConvention = CallingConvention.Cdecl)] public static extern int OutputInt(int n); static int TestOutputInt(int n) { return OutputInt(n); }
static void Main(string[] args) { //TestHelloRust(); //TestInputInt(100); Console.WriteLine($"output:{TestOutputInt(100)}"); Console.WriteLine("Hello C# !"); Console.Read(); }
结果:
/* Rust Dll get i32: 100 output:200 Hello C# ! */