FORTRANとC++の連動についてこんにちはゲストさん。>>解決済みの質問FORTRANとC++の連動について私は,Fortranを用いて解析の業務をしている,プログラム初心者です。2003(VC++)が必要ということで,こちらも購入しました。**.fといったコマンドでコンパイルリンクし,実行しているだけです。これからは,VC++の方に移行していきたいと考えていますが,しばらくはFortranで作成したサブルーチンを有効活用したと考えています。そこで,VC++ベースのメインプログラムからFortranのサブルーチンを呼び出すプログラムの作成方法,コンパイルリンク方法をご教授ください。CMyDlg::OnBnClickedOk(){ここで,FORTRANのサブルーチンを呼び出したい。22:25:20通報するQNo.1303644naetop困ってます質問者が選んだベストアンサーまず、FortranとC++で1つのモジュールを作ることは出来ないと思います。CとFortranではランタイムライブラリが違うし、さらに言うとVF8はIntel製です。やるなら、Fortranでライブラリ(staticまたはDynamic-link)を作り、C++からリンクするというやり方になると思います。Libraryを追加。i,j);OnOK();}5.C++のプロジェクトの依存関係の設定でFortranプロジェクトをチェックただ、Fortranの標準出力は使えません。標準出力のライブラリはWindowsモジュールのライブラリと共存できないはずです。Overviewを検索すれば載っています。この辺はVF6の頃から変わっていなくてわたしはVF6の日本語オンラインヘルプで読みましたが。私もVF8の日本語ヘルプの該当個所を見つけることが出来ました。上記の方法で動作できました。ところがいまいち理解できていません。命名規則や参照渡しに関する事項だと思いますが。subsub(i,j)まま(!DEC~を追加していない)で下記のようにしております。subsub(int*,int*);}として,うまく行ってます。,__stdcallを使うとうまく行かなかったりして,路頭に迷っています。回答(4)ANo.4jirorin呼出規約の、cdeclと_stdcallは別物です。アセンブラレベルで、どのレジスタを使うかとかというような規約です。関数の名前付け規則でもあります。_stdcallは確か関数名の後に引数のバイト数が付きます。Microsoftのコンパイラはデフォルトでcdeclです。C::subsubはいりません。16:33:12お礼_stdcallだと@4などと追加されていました。c++では使えませんでした。コマンドラインでは使えました。みなさんアドバイス有難うございます。マスターまでには時間がかかりそうですが,FORTRANとVC++の連動が出来ましたので,これにて締め切りさせて頂きます。(0)通報するANo.2terra5詳しくは両方のコンパイラを持っていないとわかりませんので、概要程度です。fortranとCでは引数の渡し方が異なります。valueと呼ばれる方法です。意味は調べてみてください。具体的にはコンパイラによって違うかも知れませんが、fortranで整数を渡している部分は、Cでは整数のポインタとして引数が来ている考える必要があります。多次元配列を使っている場合、並び順がCとFORTRANでは異なるので合わせる必要があります。Cならメモリに[0][0],[0][1],[0][2]の順にならびますが、FORTRANでは(0,0),(1,0),(2,0)の順になります。それとコンパイラ依存になりますが、アセンブラレベルで引数を渡す方法を同じにする必要があります。おおまかに言えば、全てスタックを使う場合と特定のレジスタを優先して使い足らない場合スタックを使う場合があります。実際にどうかは各コンパイラについて調べて、合わせる必要があります。プログラム中で指定可能かも知れません。)あと、外部名を一致させる必要があります。Cでfunc()という名まえの関数があってもこれはあくまで言語内部の名前で、他言語とのリンクを考える場合、リンカーが使う名前が問題になります。この場合は_func()という名前になったと思いますが。C++だと(オーバーロードがあるため)さらに複雑でおそらくそのまま使えませんから、Cインターフェイスを使用することになると思います。"C")逆にCからfunc()として呼び出すためには、_funcという名前にする必要があります。fortranがどうなるかはコンパイラによります。なんらかの手段は用意されていると思いますが。VFのマニュアルに説明があると思いますので調べてみてください。初心者には難しいと思いますが。理解できるよう調べていますが,まだうまくいきません。おっしゃる通り,ソースコードが異なるFORTRANのサブルーチンを呼び出す場合は,ヘッダー部分に工夫が必要みたいですね。(0)通報するANo.1sha-girlVC++を使って出来たobjファイルがあるなら可能かもしれません。2003\Vc7\bin\vcvars32.batを実行します。cのソース(c.cpp)を改造します。c.cppにプロトタイプ宣言を記述します。※aとbが整数型(32bit)だった場合です。cのソースをコンパイルします。/cこれでc.objができます。Fortran8.0については全く知らないので自信はありませんが。08:22:39お礼アドバイス有難うございます。リンクする際,に未解決の外部シンボルとしてエラーが発生致しました。FORTRANのサブルーチンを認識していないようです。CのコンパイラのWindows版についてお尋ねします。Reserved.掲載情報の著作権は提供元企業等に帰属します。