| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
卒研で動画像解析なシステムを書く。その開発環境をどうしようかと考えた。
先ず、ラスタ画像を扱うローレベルな処理が入るので、速いコード(よりマシンのネイティブコードに近いコード)を吐けなくてはならない。そこでC++を使うことが決定。環境としては、もっともマルチメディア対応が優れており、ライブラリが充実しているということで、Windowsを使おう。と、ここまではすんなり決まった。
ところで、C++はいちおう高級言語に位置づけられるくせに、実際的な処理が言語自体にほとんど用意されていない。高レベルな処理はすべて外部ライブラリとして用意する仕組みになっている。当然、細々とした処理をいちいち自前で書きたくないし、GUIをWindowsAPIで書くのも面倒でだるいので、ライブラリを使おうということになる。
ここでスタンダードな選択肢として登場するのはMFCなんだが、僕はMFCがあまり好きくない。そこで、前々からきちんと勉強してみようと思っていた.NET Frameworkを使うことにした。GUIその他を.NET Framework+C#で書いて、そこからC++で書かれたローレベルなコードを呼び出すようにしよう。そうだそうだそうしよう。
で。
C#からC++なコードを呼び出す手段としては、次のようなものがある。
1. DLL(Dynamic Link Library)をつくる
2. COM/ATLをつかう
しかし、関数ベースなDLLはオブジェクト指向化された.NETの世界観にそぐわないし、COM/ATLはこれから.NETに置き換えられていくレガシーな技術である。こいつらを使うのはいやーんな感じだ。そこでもう一つの選択肢が登場する。
3. managed c++を使う
なんと、managed c++を中継役として経由することで、C#からC++のコードをシームレスに呼び出すことができるんである。
managed c++はそれ自体マイナーな存在で、プログラムを組むひとでも、多くは名前すら聞いたことがないんじゃないかとおもう。そこで、次回は、実際にmanage c++を使って、(unmanagedな)C++で書かれたコードを.NETな環境に移植するのを実際にやってみよう。

