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

时间:2012-09-24 17:52:52

标签: 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
}

2 个答案:

答案 0 :(得分:8)

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

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

void MyClass::GetStrings(String^& str1, String^& str2)

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

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

void MyClass::GetStrings(String^* str1, String^* str2)

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

答案 1 :(得分:1)

事实证明我必须使用^&作为函数签名中的参数类型。 ^%是CLI的一部分,但我使用的是CX。当我使用^%编译器会抱怨它并用&替换%继续前进。手动将它们更改为&工作得很好。