如何修改从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
相关产品推荐
相关产品推荐

