记录C# WinForm项目调用Rust生成的dll库

一、开发环境

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

相关推荐
zxbmmmmmmmmm3 小时前
在 Avalonia 中编写高性能动画
c#·xaml·avalonia·compositon
加号35 小时前
【C#】 HTTP 请求通讯实现指南
开发语言·http·c#
步步为营DotNet6 小时前
.NET 11 中 Microsoft.Extensions.AI 在智能后端推理与决策优化的应用
云原生·c#·.net
工程师0077 小时前
.NET 线程池 工作线程 扩容 + 空闲 + 回收 原理
c#·线程池·扩容·回收·空闲
njsgcs7 小时前
c# solidworks createline 拉伸发现有微小两点间隙 导致拉伸变成薄壁特征 改bug画了6个小时 解决结果
c#·bug·solidworks
时光追逐者7 小时前
一款基于 C# 开发的 Windows 10/11 系统增强工具,精简、优化、定制一站完成!
开发语言·windows·c#·.net
绿豆人7 小时前
进入内核-中断开启
开发语言·c#
小杍随笔7 小时前
【Rust桌面革命:Tauri×Dioxus——架构对决、实战拆解与2026选型杀招】
开发语言·架构·rust
步步为营DotNet7 小时前
.NET 11 中 C# 14 新特性在云原生微服务安全与性能优化的深度探索
云原生·c#·.net