実は今C#を使ったプログラムを使っている。C#を使えば
MSの世界にどっぷりハマる事は明確なのでこれまで正直言って避けていたのだ。しかし仕事とあっては避けてばかりもいられないので色々と勉強をしている(^^;
最初の難関はGUI部だ。Visual-C++でMFCを使った開発ならもう10年選手なのでお手の物。でもC#を使ったイベントドリブンなGUI開発は今更食指も動かないし細かなノウハウも使え無いのでパスしたいところ。ならC++(ネイティブコード)からC#(マネージコード)が使えれば良い。私のC#に関する知識はJavaの真似っ子と言うレベル。Javaはバイトコードと呼ばれる中間コードを仮想マシンVMで実行するが、C#はマネージコードと呼ばれる中間コードになるだけだろうと。JavaならJNIを使ってネイティブコードとインターフェイスを取るがC#だとDllImportを使えば良いのかと考えていた。ただ今回必要なのはネイティブコードから中間コードを使いたいので本当は逆向きだ。実はちょっと面倒だなと敬遠しかかっていた。
ところが先方から
「Visual Studio .NET 2003のC++マネージ拡張」と言うのがあるがどうだ?とのメールが。チェックして見るとうわ~何だこれは(^^; .NET 2003ではC++マネージ拡張となっているが、最新のVisual Studio .NET 2005 を使えば C++/CLI と言うC++を拡張してマネージコードを吐ける規格が出来ているでは無いか。しかも1つのソースファイル中でも#pragmaを使ってマネージコードとネイティブコードが使い分けられる。さすがMS節操が無いぞ(笑) しかもフレームワークとしてもMFCと.NET Frameworkが同時に使えてしまう。
何でもアリやなあ… Java環境だとネイティブのインターフェイスはJNIだけなので使いにくいがこれも色々理由があってそうなっているので、MSの実装が素晴らしいのかとんでも無いのかは立場によって異論があるところでしょう。
と言う事で細かな技術的な問題点はあるもののとりあえずネイティブコードとマネージコードの混在は可能なようだ。C++/CLIが使えるのは Visual Studio .NET 2005 からなので、これからは2005を中心に使うか。でも C++/CLI なんてのが動いてしまうと C# の立場はどーなる(^^;;
あと注意が必要なのはC++/CLIはC++の拡張であって上位互換しか無い点と、ソースはほぼ同じに見えるがC++/CLIだとマネージコードになるのでメモリ管理が従来のネイティブコードのC++とは全く別物になるので気をつけないとコンパイル時にエラーになる辺り。この辺りの注意点なんかはまた時間を見て書きたいと思います。とりあえず今日はこの辺りまで。