当前位置: 首页 > news >正文

C#调用Rust动态链接库DLL的案例

C#调用Rust动态链接库DLL的案例

项目概述

这是一个演示C#调用Rust动态链接库DLL的项目,包含:

  • C#主程序 (Program.cs)
  • Rust动态链接库 (rust_to_csharp目录)

使用C#创建一个net9的控制台项目,不使用顶级语句

dotnet new console --framework net9.0 --use-program-main

使用rust创建一个helloworld的lib项目生成一个C#能够调用的DLL

  1. 首先创建一个Rust库项目:
cargo new --lib rust_to_csharp
cd rust_to_csharp
  1. 修改Cargo.toml文件,添加以下内容:
[package]
name = "rust_to_csharp"
version = "0.1.0"
edition = "2021"[lib]
name = "rust_to_csharp"
crate-type = ["cdylib"]  # 这将生成动态链接库
  1. 修改src/lib.rs文件,添加以下内容:
use std::ffi::CStr;
use std::os::raw::c_char;#[no_mangle]
pub extern "C" fn hello_world() -> *const c_char {let s = "Hello from Rust!\0";  // 注意添加null终止符s.as_ptr() as *const c_char
}
  1. 编译Rust库:
cargo build --release
  1. 生成的DLL文件位于target/release目录下,例如rust_to_csharp.dll。

使用C#调用Rust动态链接库

  1. 在C#项目中添加对Rust动态链接库的引用:
using System;
using System.Runtime.InteropServices;class Program {// 将其复制到C#项目的输出目录[DllImport("rust_to_csharp.dll")]private static extern IntPtr hello_world();static void Main() {IntPtr ptr = hello_world();string message = Marshal.PtrToStringAnsi(ptr);Console.WriteLine(message);  // 输出: Hello from Rust!}
}

注意事项

  1. 确保C#项目能访问到生成的DLL文件(可将其复制到C#项目的输出目录)
  2. 32位/64位需要匹配,建议都使用x64平台
  3. Rust字符串需要以null终止(\0)才能被C#正确读取
http://www.xdnf.cn/news/932419.html

相关文章:

  • ​RBAC(基于角色的访问控制)权限管理详解
  • 学习日记-day24-6.8
  • 鸿蒙API自翻译
  • 70常用控件_QVBoxLayout的使用
  • 指针的使用——字符、字符串、字符串数组(char*)
  • C++进阶--C++11--智能指针(重点)
  • 12.7Swing控件6 JList
  • gitcode与github加速计划
  • LabVIEW Modbus 主站冗余控制
  • css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?
  • 3Ds Max 2026安装包+教程网盘下载与安装教程指南
  • [特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
  • WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js
  • 【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
  • 图神经网络(GNN)模型的基本原理
  • MySQL:CTE 通用表达式
  • 在React 中安装和配置 shadcn/ui
  • 我用Cursor写了一个视频转文字工具,已开源,欢迎体验
  • leetcode 10. 正则表达式匹配
  • 对比传统引擎,Unity3D 在生产配套中的独特优势
  • 【MySQL系列】MySQL 执行 SQL 文件
  • Java后端检查空条件查询
  • 快排图解及JS模板代码
  • 循环变量捕获问题​​
  • redis--黑马点评--分布式锁实现详解
  • 【C/C++】EBO空基类优化介绍
  • C++----剖析list
  • 言和语的洞见,即:融智学解决方案
  • SEO新手优化步骤拆解
  • 人脸识别技术应用备案办理指南