0

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。

4

1 回答 1

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();
}
于 2018-02-05T05:23:19.887 回答