BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C++コンポーネント拡張:新しいCOM

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

原文(投稿日: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だが、少なくともインターフェースを実装できる。

この記事に星をつける

おすすめ度
スタイル

BT