Search code examples
c#rustreferenceffi

How to mutate a variable passed by reference from C# to Rust?


I would like to pass variable by reference to Rust, so it is not going to be copied every time I call the function. My code so far:

#[no_mangle]
pub extern fn random_number(mut _number: &i32){
    println!("Hello world from rust - random_number");
    _number = &50;
}
[DllImport("rust_to_cs.dll")]
static extern void random_number(ref int number);

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

The result I am getting

Hello world from rust - random_number
36

Calling the function is working but the variable is copied not passed by reference.


Solution

  • I need to change rust function to something like this

    #[no_mangle]
    pub extern fn random_number(number: &mut i32){
        println!("Hello world from rust - random_number");
        *number = 50;
    }
    

    Instead of random_number(mut _number: &i32) I have random_number(number: &mut i32)

    Assigning new value has been also changed from _number = &50; to *number = 50;

    Now I got following result

    Hello world from rust - random_number
    50