[英]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.