如何在cppwinrt中访问DeviceInformation类的成员?

时间:2018-02-05 05:02:28

标签: c++-winrt

winrt MIDI文档示例代码建议,在给定DeviceInformation对象的情况下,可以通过引用DeviceInformation的Id来创建MIDIPort,如下所示,对于名为devInfo的DeviceInformation:

midiOutPort =等待MidiOutPort.FromIdAsync(devInfo.Id);

当然,在cppwinrt中,人们会使用它的C ++版本,但关键点是访问devInfo的Id(无论是通过devInfo.Id()还是devInfo.Id或其他)。错误是" DeviceInformation没有名为Id的成员。"当然这存在于cppwinrt中,但我还没有找到访问它的方法。

如果相关,我用这种方式声明了DeviceInformation:

winrt::Windows::Foundation::Collections::IIterator<winrt::Windows::Devices::Enumeration::DeviceInformation> devInfo;

因为在枚举DeviceInformationCollection时不接受winrt :: Windows :: Devices :: Enumeration :: DeviceInformation。

1 个答案:

答案 0 :(得分:2)

您正在处理IIterator<DeviceInformation>,而不是DeviceInformation。要从IIterator中提取数据,您需要调用Current()。所以,在你的例子中:

auto id = devInfo.Current().Id();

此外,C ++ / WinRT集合支持基于范围的for循环,因此您可以绕过IIterator并直接迭代集合,如下所示:

DeviceInformationCollection collection = ...; // Some initialization
for (const auto& info : collection)
{
  auto id = info.Id();
}