続・Universal Windows Appの正体

Windows 10のUniversal AppはWindows 8.1と違ったという話。

以前、Universal Appの正体は、ターゲットOS毎に別のバイナリをビルドしたものを1つのパッケージに詰めたアプリだと言った。その時は確かにそうだったのだが、Windows 10 build 10041とVisual Studio 2015 CTP6を使ったところ状況が変わっていた。Universal Appが、Windows 10のUniversal Appと、Windows 8.1のUniversal Appに分かれたのだ。

Windows 8.1のUniversal Appは以前言った通りのマルチバイナリ、そしてWindows 10のUniversal AppはターゲットOSの区分に関係なく1バイナリのアプリになっていた。こりゃ何事か?って感じでもなく、このからくりは.NET4.6だった。あぁ、そうだ、.NETは元々CPU依存がなかったんだっけ、と改めて思い出した次第。もちろんターゲットCPUを選択することもできる。ちなみにCTP6の段階ではターゲットデバイスにXBOXは無かった。

ここで言いたいことは.NET 4.6は結構凄いということだ。Windows 8/8.1の時のパッとしないAPI群、”WinRT”はその実、P/Invokeが出来ない.NET 4.5だった訳だが、.NET 4.6はP/Invokeを必要としない位にHardwareアクセスができるように拡張がされている。具体的にはDeviceクラスにおけるWiFiの追加で、Wi-FiのScan, Connectを可能にする予定だし(予定と書いたのは、仕様上存在するはずだが、今のBuildには実装されていないっぽい)。どうやって使うのかわからんがDeviceクラスにはSDIOなるものまでついている。

.NETでWi-Fiやったことがある人なら、P/Invoke地獄を体験したと思うが、あれが無くなるのだ。非常にありがたい。まだ完成してないけど。WinRTの何がダメだったかって、P/Invokeに頼りっきりだった.NETなのにP/Invoke使えなくしちゃうんだもん。こんなん使いもんになんねーよ。とその場で投げた人が結構大勢いたと思う、私もその一人だ。

私は、これでWindows 10がぐっと好きになってきた。いけるんじゃないか?Windows 10