プロが教える店舗&オフィスのセキュリティ対策術

Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか?何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

A 回答 (1件)

回答いたします。



ユーザーガイドの213ページ(アクロバットだと、231ページ)に出ています。具体的には、Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになります。

そしてC側では、
#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことが出来ます。

ユーザガイドの仕様にしたがってサンプルを書いてみると。
サンプル2を例に取ります。

Fortran側
C_EXTERNAL WRITE 'WriteFile' : INTEGER*4
INTERGER*4 RESULT
RESULT=WRITE()
以下続く
最後は、RETURN

C側
#extern int Writefile(int);

こんな感じですね。

では。

この回答への補足

上記の例を提示してくださり、ありがとうございました。ところで、コンパイルのほうですが、うまくいきません。Fortran側でRETURNを最後に持ってくると

D:\work\fortran> ftn95c /link /dreal sample.f

D:\work\fortran>ftn95.exe /link /dreal sample.f /link
[FTN95/Win32 Ver. 5.01.0 Copyright (c) Silverfrost Ltd 1993-2006]
0005) return
*** RETURN cannot be inside a PROGRAM block
1 ERROR [<main program> FTN95/Win32 v5.01.0]
*** Compilation failed

となってしまうのです。「Cpad for Salford FTN77」を使ってコンパイルしています。

使っているファイルをいくつか書き出します。
<D:\work\fortran\sample.f>
C_EXTERNAL WRITE 'WriteFile' : INTEGER*4
INTEGER*4 RESULT
RESULT=WRITE()
write(*,*) result
return
end
<D:\work\fortran\sample.c>
#extern int Writefile(int);
<C:\Program Files\Silverfrost\FTN95\ftn95c.bat>
ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link

ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。
何が問題でしょうか?再度ご教示願います。

補足日時:2009/05/09 11:37
    • good
    • 0
この回答へのお礼

上記の例を提示してくださり、ありがとうございました。ところで、コンパイルのほうですが、うまくいきません。
何が問題でしょうか?再度ご教示願います。

お礼日時:2009/05/10 21:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!