数组作为ValueSet中的值

时间:2019-05-22 05:16:29

标签: c++ arrays c++-winrt

我的目标是将字符串数组作为值添加到ValueSet中。我可以在C#中完成此任务,但是在C++-WinRT中遇到一些问题。

我正在尝试将array_view传递给box_value以便将其转换为IInspectable类型,但出现错误T must be WinRT type。这是检查问题的示例代码:

ValueSet MyValueSet;
hstring key(L"key");
vector<wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
array_view<hstring> hvalue(hvector);
IInspectable keyValue = box_value(hvalue);
MyValueSet.Insert(key, keyValue);

请告知我该如何实现。

2 个答案:

答案 0 :(得分:3)

有关如何创建Collection对象的信息,请参见https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/collections

此代码应正常工作:

ValueSet myValueSet;
hstring key(L"key");
std::vector<std::wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
myValueSet.Insert(key, winrt::single_threaded_vector(std::move(hvector)));

或更短:

ValueSet myValueSet;
myValueSet.Insert(L"key", winrt::single_threaded_vector<hstring>({L"1", L"2"}));

答案 1 :(得分:0)

winrt::single_threaded_vector<hstring>对我不起作用。

我发现方法PropertyValue.CreateStringArray(String [])工作正常。

https://docs.microsoft.com/en-us/uwp/api/windows.foundation.propertyvalue.createstringarray

设置值:

ValueSet MyValueSet;
hstring key(L"key");
vector<wstring> mystringvalues{ L"1",L"2" };
std::vector<hstring> hvector;
for (std::wstring v : mystringvalues) {
    hvector.push_back(hstring(v));
}
array_view<hstring> hvalue(hvector);
MyValueSet.Insert(key, PropertyValue::CreateStringArray(hvalue));

MyValueSet.Insert(key, PropertyValue::CreateStringArray(com_array<hstring>{ L"1", L"2" }));

并获得价值:

com_array<hstring> strValues = MyValueSet.Lookup(key).as<IReferenceArray<hstring>>().Value();
for (hstring str : strValues)
{
    wcout << L"str = " << str.c_str() << endl;
}