VC++传递平台:: String ^由ref

Vap*_*olf 2 visual-c++ windows-runtime c++-cx

我在这里错过了什么?我认为^是一个智能指针,我可以通过ref将字符串传递给函数.其他帽子物品怎么样?

// calling code
MyClass::GetString(_str1, _str2);
// both strings are nullptr at this point

/* static */ 
MyClass::GetStrings(String^ str1, String^ str2)
{
    // Read from Local Settings
    auto value = localSettings->Values->Lookup(kKey);
    String^ temp = ref new String(value->ToString()->Data());
    str1 = temp;

    // same for str2
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 9

A T^类似于指针类型; 当你有一个带T^参数的函数(比如你的GetStrings静态成员函数)时,hat会按值传递,就像一个指针按值传递一样.

如果你想String^通过引用传递,你需要使用引用:

void MyClass::GetStrings(String^& str1, String^& str2)
Run Code Online (Sandbox Code Playgroud)

请注意,引用是C++语言功能,不属于Windows运行时类型系统.Windows运行时类型系统也不支持通过引用参数输入/输出; 仅支持out参数.

因此,如果MyClass是公共Windows运行时引用类型并且GetStrings是公共或受保护的成员函数(基本上,如果MyClass::GetStrings出现在元数据中并且可以跨Windows运行时ABI调用),则需要使用指针:

void MyClass::GetStrings(String^* str1, String^* str2)
Run Code Online (Sandbox Code Playgroud)

这些指针是out参数:你可以写入指向String^s但你无法读取它们.