繁体   English   中英

更改从 C# 传递给 CLR 的 String^ 参数

[英]Change String^ parameter passed from C# to CLR

我有一个 C++ 库,它正在使用 C++ CLI 进行包装。 CLI 库有一个 function 声明,如下所示:

void changeString(System::String^ message)

在 C# 中,我有一个字符串变量,我是这样传递的:

string myString = "This should be gone";
CLI_Wrapper_Object.changeString(myString);

回到 CLI 库中,我尝试以下操作:

void changeString (System::String^ message){
   message = "New Message";
}

这似乎改变了 CLI 级别的值,但没有改变 C# 级别的值。 我可以看到它肯定是通过调试器更改的,但是一旦我跳回 C#,我就会再次看到旧的初始值。

我尝试过的其他方式:

message = gcnew System::String("New Message");

甚至有可能做我想达到的目标吗?

C# 等同于您要执行的操作是:

public void changeString(string message)
{
    message = "New Message";
}

string message = "Foo";
changeString(message);
Console.WriteLine(message); // Prints 'Foo'

那行不通,因为 .NET 中的参数是按值传递的。 如果您需要更改调用者看到的变量,则需要将其声明为ref

public void changeString(ref string message)
{
    message = "New Message";
}

string message = "Foo";
changeString(ref message);
Console.WriteLine(message); // Prints 'New Message'

C++/CLI 等价物是%

void changeString (System::String^% message){
   message = "New Message";
}

然后在 C# 中:

changeString(ref message);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM