始動
以前C++で作成した数値計算用行列クラス(以降C++Matrix)を,何とかしてC#に移植できないかと考えてみました.
C#で使用するためには,CLR上で動作するようにしなければなりません.CLRに準拠したコードはマネージコード(managed code)と呼ばれます(CLRに管理されるから,ネイティブコードは管理されない).
自作したC++Matrixは,内部でCLAPACKを使用しており,ネイティブコードが混在することになります.しかし,CLAPACKは有名な数値計算ライブラリであるため,これは変更したくありません.
そこで,一度C++/CLI化し,C#から利用可能なDLLを作成することにしました(常套手段ですね).C++/CLIは,マネージコードからネイティブコードを呼び出すことができるため,Cで書かれたライブラリを利用することができます.
@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
私は,C++/CLIをあまりよく知りません.少々戸惑うこともありました.
- ref class は,const,volatile 関数を持つことができない
- そのため,func( const Hoge^ h )としてしまうと,メンバを呼び出せなくなる
- operator[]をインデクサに書き換えなければならない(こんな感じ↓)
property int default[int] { void set(int i, int value) { *(p+i) = value; } int get(int i) { return *(p+i); } }
まだ移植し切れていませんが,これから少しずつ進めていこうと思っています(余りこれに時間を割くことができないのですが...(^_^;).