BT

Ready for InfoQ 3.0? Try the new design and let us know what you think!

C++コンポーネント拡張:新しいCOM

| 作者: Jonathan Allen フォローする 655 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2011年9月18日. 推定読書時間: 2 分 |

原文(投稿日:2011/09/14)へのリンク

COMプログラミングは生きており、Windowsプラットフォーム上では健在だ、C++の新しい変形版は、COMプログラミングをもっと扱い易くしている。 C++ Component Extensions(C++コンポーネント拡張)として知られている、この新言語は、新しいWindowsランタイム、WinRTを作るために使われた。

COMをベースにしているが、C++ Component Extensions は、何よりも .NETプログラミングに一番似ている。これを使うと、COMインターフェースを通さずに直接クラスやオブジェクトを扱うことになる。

C++コンポーネントは、“public ref class XXX sealed” ここでXXXはクラス名、というシグネチャを使って宣言する公開クラスで始まる。このように修飾されたクラスは、「活性化可能クラス」として知られており、.NET や JavaScriptベースのアプリケーションが消費できる。“ref” キーワードは、そのクラスが「Windows Runtime 互換の型」であることを示している。“sealed” キーワードは継承を抑止している。クラスがJavaScriptによって消費できるようにするためである。文書がこの点に関して曖昧であるが、JavaScriptから使われないクラスなら sealedである必要はない様だ。例えば、 Button クラス は ButtonBaseから継承している。クラスに加えて、 C++コンポーネント拡張は構造体もサポートする。しかし Windows Runtime構造体 は、むき出しのデータメンバーのみに限られる。

クラスは、コンストラクタ、メソッド、プロパティ、イベントを持つことができる。クラス自身の外で、イベントによって使われるデリゲート シグネチャを見ることもある。これはC++/CLI ではないが、シンタックスは、ハンドルのための^シンボルを使い、非常に良く似ている。

C++コンポーネント拡張におけるメモリーは、それを消費する言語のセマンティックスによって、異なって処理される。もしC++アプリケーションがライブラリを使えば、その時オブジェクトは参照カウントされる。.NETコンシューマは、もちろんマーク&スイープ方式のガーベッジコレクション使う。

公開メソッドは 全ABI すなわち Abstract Binary Interfaceから見える。そのようなメソッドは、パラメータに Windows Runtime型を使わなければならない。intやdoubleのようなC++の組込み型は、自動的に変換される。他の型は明示的に宣言しなければならない。公開メソッドには、 Platform::Stringが使われる。内部で、Microsoftは標準のC++ string 型を使うことを薦めている。

全ABIで、カスタム例外型はサポートされない。開発者は組込みの例外型の一つをスローしなければならない。もし追加の情報が必要な時は、 HRESULTをパラメータとして取る一般的な COMExceptionを投げることができる。

JavaScriptのサポートするクラスは sealedだが、少なくともインターフェースを実装できる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション
BT