一、开发环境
1.RustRover (version:2023.3 EAP)
2.Visual Studio 2019 (version:16.11.30)
3.Windows 10 64位 OS
4.Win+R:控制台程序,cmd.exe
二、使用RustRover编译Rust脚本为dll
1.下载安装Rust,https://www.rust-lang.org/tools/install
2.双击rustup-init.exe直接安装。
3.安装完后,为rust添加x86编译链接器的支持,后续为生成供C# WinForm目标平台为32位的做准备。
按Win+R,输入cmd,回车,输入
cs
rustup target add i686-pc-windows-msvc
如图:
4.安装RustRover,我是用Jetbrains Toolbox安装的,毕竟方便。
5.打开RustRover,创建一个工程,如ForCSharpDll
其中在lib.rs中写上如下代码
rust
#[no_mangle]//表明编译时函数方法名不会被混淆
//extern表示该函数是一个外部函数接口
pub extern fn Hello_Rust(){
println!("Hello Rust Dll!")
}
#[no_mangle]
pub extern fn Return_Int32() -> i32{
32767
}
6.在Cargo.toml中写上如下代码
rust
[package]
name = "ForCSharpDll"#包名,即工程的文件夹名
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[lib]
name = "RustForCSharpDll"#需要生成的dll名称
crate-type = ["cdylib"]#表明是C规范动态库
动态库规范说明:
dylib(动态库),只能被Rust写的程序调用
.so是Linux系统的动态链接库
.dylib是MacOS系统的动态链接库
.dll是Windows系统的动态链接库
cdylib(动态库),可以被其他语言写的程序调用
.so是Linux系统的动态链接库
.dylib是MacOS系统的动态链接库
.dll是Windows系统的动态链接库
7.编译为dll,在RustRover自带的终端里输入:
cs
cargo build --release --target i686-pc-windows-msvc
如图:
如果出现这样的错误,你可能没添加Rust的x86编译链接器的支持,上面的章节一,3.已经说明。
8.找到生成dll的目录
9.把这个dll文件复制到你的WinForm项目的Debug、Release目录下
三、打开你Visual Studio 2019的WinForm项目,输入测试代码
cs
[DllImport("RustForCSharpDll.dll", EntryPoint = "Hello_Rust", CallingConvention = CallingConvention.Cdecl)]
public static extern void Hello_Rust();
[DllImport("RustForCSharpDll.dll", EntryPoint = "Return_Int32", CallingConvention = CallingConvention.Cdecl)]
public static extern int Return_Int32();
private void FrmMain_Load(object sender, EventArgs e)
{
Hello_Rust();
}
哦喔Over! o.0