WinRTを使ってオーディオレンダリングデバイスを列挙してみた。ソースはこんな感じ。もうC++に見えませんな。。
DeviceInformation::FindAllAsync(DeviceClass::AudioRender)->Completed
= ref new AsyncOperationCompletedHandler<DeviceInformationCollection^>(
[=] (IAsyncOperation<DeviceInformationCollection ^>^ asyncInfo, AsyncStatus asyncStatus)
{
if(asyncStatus == AsyncStatus::Completed)
{
DeviceInformationCollection ^col = asyncInfo->GetResults();
for(int i = 0,end = col->Size;i < end;++i)
{
this->Information_->Text += col->GetAt(i)->Name + L"\n";
}
}
}, Platform::CallbackContext::Same
);
Completedに指定するデリゲートはラムダ式で書けるといいのだが、AsyncOperationCompletedHandlerイベントハンドラを挟まないとできなかった。あとイベントハンドラにPlatform::CallbackContext::Sameを指定しないとthisをキャプチャーすることができなかった。非同期呼び出しなので別スレッドとなりマーシャリングが必要だからかもしれない。この程度の呼び出しであれば非同期である必要もないと思うんだけど、非同期でない呼び出しは見たところなかった。
実行結果は下記のとおり。デバイスは列挙できていた。