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。
答案 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();
}