C++/CX を置き換えるよさげなライブラリ C++WinRT を発見した。
C++/CX の機能を純粋な C++(C++17 とか新しめの)で実装したものらしく、WinRT の C++バインディングのような位置。 C++/CX で
のようなものを
のように置き換える。->
じゃなくて .
を使うスマートポインタで実装されている。
- Migrating C++/CX source code to C++/WinRT
C++/CX で async, await な非同期を実装する道具だった PPL もうまく置き換えているようだ。
- Using C++ co-routines with C++/WinRT asynchronous methods
やってみる clone https://github.com/Microsoft/cppwinrtをcloneしてincludeできるようにしておく。 C++WinRT はヘッダオンリーライブラリである。 ビルド確認
github.com
https://github.com/Microsoft/cppwinrt/tree/master/10.0.15063.0/Samples/CL
をベース。
あえて CMake で。 CMakeLists.txt
UWP をターゲットにしたプロジェクトを生成する。
ビルドすると警告が出る。
以下のように属性をつければ外せた。
Debug - X64 - ローカルコンピューター でアプリが起動して、即終了することが確認できればよし。 UWP の作法で空の App を作ってみる
警告とは無関係に、実行に
[Platform::MTAThread]
か winrt::init_apartment();
のどちらかが必要?
IUnknown*を得る winrt::get_abi メモ
github.com
https://github.com/Kitware/CMake/blob/master/Tests/VSWinStorePhone/CMakeLists.txt
VisualStudio2017 の C++/CX Universal D3D11 のテンプレートを C++/WinRT バージョンに改造できた。間違ってもコンパイルが通って実行時エラーになるのに難儀したが、C++/CX よりはだいぶ使い勝手がよさげな感じ。