C#からNAGライブラリを利用

NAG C ライブラリ DLLをC#から利用する

NAG C ライブラリ DLLをC#から利用する

C#からNAGライブラリを利用する場合はNAG Library for .NETのご利用を推奨します。
もし必要なNAGルーチンがNAG Library for .NETに含まれていない場合は NAG Fortran Library for Win32 ApplicationsまたはNAG Cライブラリ(以下に記述)をご使用ください。

NAG Cライブラリは以下で説明されるデータタイプを引数として利用します。

  • スカラのdouble, int, complex。これらは値渡しもしくは参照渡し(ポインターとして)になります。
  • enum型
  • double, int, complexの配列
  • 構造体。通常ポインターとして渡されます。
  • double**。NAGルーチン内で領域確保されたものが返されますが、この場合ユーザによって解放が行われる必要があります。また、非常にまれにchar***が内部的に領域確保された文字列として返されます。
  • 関数パラメータ(コールバック)。関数へのポインタとして渡されます。

.NET環境でNAG Cライブラリ関数を利用する最初のステップはインポートの構築です。これには以下が必要です。

  • NAG Cライブラリ内の呼び出したい関数すべてのsignatureが必要です。
  • 構造体の構造とプロパティー(入力、出力、入出力)情報を指定します。これは.NETにおいて構造体が値の型であるためです。(Cのように参照の型も許されているわけではありません) また、ポインタはC#においては使用しないことが推奨されます。代わりにC# IntPtrを使用して下さい。これはCのvoid*とほぼ同等です。IntPtrフィールドはマーシャリング法を使って後から利用できます。
  • すべてのコールバックタイプのsignaturesが必要です。
  • Cヘッダファイル(nag_types.h)より生成したenum型。

clcsdnet.csはいくつかのNAG Cライブラリルーチンとコールバック関数のsignaturesを含んでいます。その他にNAG Cライブラリで利用されるいくつかの構造体の構造を含んでいます。特にその中でも構造体NagErrorはほとんどすべてのNAG Cライブラリルーチンで利用されるものです。NAGライブラリの中でも特に利用者の多い最適化に関するルーチンで利用される構造体Nag_E04_Optの構造とnag_opt_nlp (e04ucc)とそのコールバックルーチン(e04ucc_objfun_DELEGATEとe04ucc_confun_DELEGATE)のsignatureも含まれます。更にいくつかのenum型も含まれています。

その他に例として、いくつかのC#クラスを公開しています。例えばe04uccを呼び出すC#クラスは以下のe04ucce.csに含まれます。以下のそれぞれのC# ClassはMainメソッドにおいて、NAG Cライブラリのexampleと同等な機能を実現します。

これらのサンプルはコマンドライン(たとえばVisual Studioコマンドプロンプト)で次のようにコンパイルすることができます。

csc /unsafe d01sjce.cs clcsdnet.cs

NAG C Library 関数の呼び出しの際にポインタを使用する場合(上記参照), "unsafe" コンパイラオプションを指定する必要があります。

clcsdnet.cs の中で関数の宣言はスタンドアローンバージョンのNAG C Library DLL (CLW3223DA_nag.dll)に基づいています。MKL BLAS/LAPACK (CLW3223DA_mkl.dll)を使用するDLLを代わりに指定するにはDllImport属性でCLW3223DA_nag.dllをCLW3223DA_mkl.dllで置き換えてください。

コンパイルの後にプログラムを実行するには, NAG C Library DLL が現在のパスに記述されている必要がありますのでご注意ください。たとえば、もしDLL がC:\Program Files\NAG\CL23\clw3223dal\bin にある場合, PATH 環境変数はこのフォルダーを含む必要があります。MKLベースのNAG C Library (CLW3223DA_mkl.dll) をお使いの場合は、MKL DLL を含むフォルダーがパスに記述される必要があります。パスの中で以下のようにNAG C ライブラリDLL のbinフォルダーよりも後ろに記述してください。

C:\ProgramFiles\NAG\CL23\clw3223dal\bin;C:\ProgramFiles\NAG\CL23\clw3223dal\MKL_ia32_10.3\bin;<残りのパス>

Visual Studio 2005 (Visual C# 2005 Compiler version 8.0), Visual Studio 2008 (Visual C# 2008 Compiler version 3.5) 及びVisual Studio 2010 (Visual C# 2010 Compiler version 4.0)でテストを行いました。



MENU
Privacy Policy  /  Trademarks