最初「COM」とTwitterでのつぶやきを聞いて、「そうかそうか、やっぱりWindowsだもんな」と安心していました。HRESULTを返す関数があることを知り、いつもどおりと思っていました。
雲行きが怪しくなったのはここら辺からでした。
ん、sealed ってなんじゃろ
ref class……?C++/CLIっぽいけどC++/CLIではない、ネイティブコードになるんだって?
気を取り直して(見なかったことにして)、Getting Startedのほうから読み進めます: パート 5: ブログ リーダーを作成する (C#/VB と XAML を使った Windows ストア アプリ) – Windows app development)。まず、C#の例が出てきます。ああ、WPFやSilverlightっぽいですね。普通のコードです。次、VBもそうです。そして、C++、……C++?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // C++ MainPage::MainPage() { InitializeComponent(); } MainPage::~MainPage() { } void HelloWorld::MainPage::HelloButton_Click( Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { DisplayText->Text = "Hello World"; }
アウト、完全にアウトです。めっちゃ、C++という皮を被った何かでした。
いや、いいんですけどね。C++/CLIも今回のも、今までのCやC++のライブラリがそのまま使える(ヘッダをインクルードしてライブラリファイルをリンクすればよい)のであれば、C++と名乗って構わないと思いますし、私は使います。
Using Windows Runtime components in Visual C++を見ると、今回の独自拡張の内容が一通り書いてあります。
今回の^は、参照カウントで管理されるWinRTオブジェクトだそうです。gcnewではなくref newで作成するようです。内部的にはCOMオブジェクトのようです。こんなコードが動きました。
1 2 3 4 5 | Platform::Object^ o = ref new Platform::Exceptin(E_FAIL); // 適当なref class Platform::Object^* p = &o; IUnknown* punk = *reinterpret_cast<IUnknown**>(p); punk->AddRef(); punk->Release(); |
さっそく何やっているんでしょうね、自分。
ほかにも紹介しておきたいことはありますが、今日はここまでにしておきます。まとまりがなくてすみませんでした。
2011年9月20日追記:今回のC++の拡張はC++/CXと呼ぶそうです。参照:WinRT に関する誤解 « ++C++; // 未確認飛行 C ブログ
スポンサード リンク |
[…] » Metro StyleアプリとC++開発、雑感 投稿日: 2012年3月7日 作成者: sfpgmr イグトランスの頭の中(のかけら) » Metro StyleアプリとC++開発、雑感. […]