BT

CXXI が Mono に新世代の C++ 相互利用を実現する

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2011年12月22日. 推定読書時間: 2 分 |

原文(投稿日:2011/12/20)へのリンク

CXXI は,C# と C++ の相互利用を Mono 上で容易に実現する,新しい C++ 相互利用フレームワークである 。C++ オブジェクトのインスタンス生成やメソッド呼び出し,C++ クラスのサブクラス化などが C# から簡単に実行できる。

マネージドコードからネイティブライブラリをコールするには,通常は P/InvokeCom 互換機能,あるいは インタセプタ のいずれかを用いなければない。どの方法を選択しても,大量のボイラープレートコードが必要となる上に,サブクラス化など実現不可能なものもある。CXXI を使用すれば,これらのことが非常に簡単に行えるのだ。

どのような仕組みなのだろう? CXXI のツールチェインは CXXI バインディングを生成し,ひとつの .NET ライブラリを作り出す。そのライブラリには,ネイティブライブラリ内にある C++ クラスのラッパとして振舞う C# クラスが含まれている。これがどのように実現されているかについては,Miguel de Icaza 氏が詳細に 説明している

同種の技術と比較した場合はどうだろう? .NET にはすでに,マネージド C++ コード を C# と相互運用可能にする C++/CLI がある。しかしこれは,既存のネイティブ C++ ライブラリを直接 C# で利用する,という意味では CXXI と同じではない。前述した3つの方法のいずれかがやはり必要なのだ (しかも mono ではサポートされていない)。もうひとつ,C# を含むさまざまな高レベルのプログラム言語に対して,C++ クラスを利用可能にするためのラッパ/インターフェースを生成する SWIG がある。しかし CXXI はこれとも違う,と Miguel は言う。

CXXI は C++ API のバインドを生成したり利用するだけではありません。既存の C++ クラスのサブクラスを新たに生成して,それらのインスタンスを C++ に戻して代わりに利用するのです。この操作は,ユーザがメソッドをオーバーライドするときに使用する vtables をパッチすることで実現しています。

新しいライブラリであるため,特にツーリング周辺が完全には安定していない。サポートされているシナリオの内容については,github プロジェクトテストで見ることができる。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには 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でリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT