Fortran 90 プログラムから C 関数を呼び出しています ( Fortran 90 を使用する必要があります)。この C 関数は、いくつかの引数を取り、浮動小数点ポインターを返します。返されたデータを Fortran コードで正しく出力できないようです。非常に大きな数値が表示されるだけです(これはポインターのアドレスだと思います)。
REAL Fortran 変数を引数として渡し、C 関数でそれらを設定し (Fortran が参照渡しするように)、データにアクセスすることに成功しました。ただし、これはレガシー関数が使用するメソッドであるため、ポインターを戻り変数として返す必要があります (これを再実装しています)。
Fortran 90 で、C 関数から返された非文字 (実数、整数など) ポインターからデータにアクセスする方法はありますか? (注: ISO C バインディングは Fortran 2003 以降専用であるため、使用できません。) 以下に、何をしようとしているのかについてのアイデアを示しました...
ありがとう!
Fortran プログラム
program test_real
real, dimension(10) :: realpt
integer nbr
integer i
real :: a=1.0
real :: b=2.0
real :: c=3.0
nbr = 9
realpt = getpointer(a, b, c)
do 10 i = 1, nbr
print *,"return: ",realpt(i)
10 continue
stop
End
C 関数
float* getpointer(float *a, float *b, float *c) {
float *rfl = (float *) calloc(9,sizeof(float));
int i=0;
for(i=0;i<3;i++) {
rfl[i] = *a;
}
for(i=3;i<6;i++) {
rfl[i] = *b;
}
for(i=6;i<9;i++) {
rfl[i] = *c;
}
return(rfl);
} // End of getpointer function
出力
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07
return: 3.1661344E+07