C# 調用 Rust 編寫的 dll 之一:創建 dll
文中所有的程序運行環境為:windows 10 64bit,Net 5.0,Rust 1.51;烏龍哈里 2021-05-05
最近正在學習 Rust ,全部都是黑乎乎的窗口在運行。想在 window 10 下弄個 GUI 程序,都挺復雜的。於是乎想到原來學過的 WPF 。
用 WPF 來當 GUI,用 C# 來調用Rust 程序,就是本系列要研究的事情。
一、創建 rust dll
在 cmd 窗口內運行
cargo new --lib ln_dll
就會生成一個 ln_dll 的目錄,用 vs code 打開,就能看到 .\Cargo.toml 文件和 .\src\lib.rs 文件。
Cargo.toml 文件內容為:
[package]
name = "ln_dll"
version = "0.0.1"
authors = ["harlee"]
edition = "2018"
[dependencies]
添加 lib 指定內容(藍色那些)為:
[package]
name = "ln_dll"
version = "0.0.1"
authors = ["harlee"]
edition = "2018"
[dependencies]
[lib] name = "rustdll" #生成dll的文件名 crate-type = ["dylib"]
Cargo.toml 文件修改完畢。
輪到去修改 lib.rs 了。
#[no_mangle] pub extern fn hello_rust(){ println!("Hello rust dll!"); }
存盤。然后在 cmd 窗口下運行:
cargo build --release
編譯完成。去 .\ln_dll\target\release 目錄下就能看到 rustdll.dll 文件,還挺大的,800 多 k 。
二、C# 調用 dll
在 vs studio 內創建一個 net 5 的 console 文件。大概長得如此:
using System; namespace ln_rustdll { class Program { static void Main(string[] args) { Console.WriteLine(“Hello World”); } } }
涉及 C# 調用 dll 的知識點。網上一搜一堆,這里就不羅嗦了。修改內容為:
using System; using System.Runtime.InteropServices; namespace ln_rustdll { class Program { [DllImport("D:\\LabRust\\Learn\\ln_dll\\target\\release\\rustdll.dll", EntryPoint = "hello_rust", CallingConvention = CallingConvention.Cdecl)] //下面把 hello_rust 改成符合 C# 命名習慣的用法,不改就是 void hello_rust() public static extern void HelloRust(); static void TestHelloRust() { HelloRust(); } static void Main(string[] args) { TestHelloRust(); Console.WriteLine("Hello C# !"); Console.Read(); } } }
運行結果:
/* Hello rust dll! Hello C# ! */
大功告成!!!
