最初「COM」とTwitterでのつぶやきを聞いて、「そうかそうか、やっぱりWindowsだもんな」と安心していました。HRESULTを返す関数があることを知り、いつもどおりと思っていました。

雲行きが怪しくなったのはここら辺からでした。

ん、sealed ってなんじゃろ

msdn.microsoft.com/en-us/library/…

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++開発、雑感
  • ⇒ Metro StyleアプリとC++開発、雑感
  • ⇒ Metro StyleアプリとC++開発、雑感