Fortranへのデータの取り回しは、C言語と同じように構造体を使うとok。C++ならばクラスを使いたいところなのだが、Fotranで扱うことはできないので構造体(TYPE)で。
module structmodule
implicit none
! struct define
type F3D
double precision :: x,y,z
end type F3D
contains
! struct parameter
double precision function flen( pt )
type (F3D) pt
flen = sqrt( pt%x**2 + pt%y**2 + pt%z**2 )
return
end function
end module structmodule
Fortranの構造体は TYPE で定義して、メンバ変数には「%」を使って参照する。
構造体はC言語側でもう一度定義しないさないといけない。
// 構造体を呼び出す
extern "C" {
struct F3D {
double x,y,z ;
};
double STRUCTMODULE_mp_FLEN( struct F3D *pt );
}
型だけを合わせれば OK で、メンバ変数名は自由につけてよい…が、同じようにつけたほうが良かろう。
関数の引き数に使う場合は、integerの変数と同じようにポインタにする。
function の戻り値に構造体を使うことも可能だと思うのだが、メモリ関係がややこしくなりそうなので構造体のデータ受け渡しは、引数で行ったほうが無難。
