You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改从C#以引用方式传递给Rust的变量?

问题解决:Rust与C#互操作时的引用传递与值修改

你的问题核心是Rust代码对引用的处理逻辑错误:

  • 你用了不可变引用&i32,本身就不允许修改原变量的值
  • 给_number重新赋值&50只是改变了这个引用变量自身的指向,完全没触及原内存里的数据

修正后的Rust代码

#[no_mangle]
pub extern "C" fn random_number(_number: &mut i32){
    println!("Hello world from rust - random_number");
    // 解引用后直接修改原内存地址的值
    *_number = 50;
}

关键调整:

  • 加上extern "C"明确ABI,和C#的调用约定对齐
  • 参数改为&mut i32可变引用,获得修改原变量的权限
  • 通过*_number解引用操作,直接修改引用指向的内存数据

C#代码无需改动

[DllImport("rust_to_cs.dll")]
static extern void random_number(ref int number);

var result = 36;
random_number(ref result);
Console.WriteLine(result);

修正后的运行结果

Hello world from rust - random_number
50

这样就能实现真正的引用传递,直接修改原变量的值了。

内容的提问来源于stack exchange,提问作者pr0s3q

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:53:15