C# 調用 Rust 編寫的 dll 之一:創建 dll


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# !
*/

大功告成!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM