• ベストアンサー

CからFortrunサブルーチンをコールする方法

以前Fortrunで作ったサブルーチンを新たにCからコールする方法がわかりません Cの方でFortrunのサブルーチン名を宣言すればいいと思うのですが。。。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

一般的にCからフォトランのサブルーチンを使うことはできません。そのため無理だと思います(もしかしたらインラインフォトランに対応したCコンパイラとかあるのかもしれませんが、その可能性は低いと思います)。 普通はフォトランで作ったソースコードをC言語に変換して使います。つまりフォトランのサブルーチンを完全に書き換えることになります。例える英語から日本語に翻訳するようなものです。

masak307
質問者

お礼

早速の解答ありがとうございます 無理な事をしようとしていたのですね ちなみにフォートランのサブルーチンの方は膨大でC言語に変換するにはかなり時間がかかるのでメインをフォートランでなんとかします

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

CからFORTRANのコードを呼び出す一般的な方法はありませんが、CコンパイラとFORTRANコンパイラが同じベンダのものであれば、何らかの方法が用意されているものです。 例えば、__fortranキーワードを付けて関数を宣言定義するといったやり方です。

masak307
質問者

お礼

かなりややこしそうなので今回はあきらめます 解答ありがとうございました

関連するQ&A

  • サブルーチンを認識しません。

    perlプログラムで サブルーチンの中で、別のサブルーチンを呼び出していますが、 なぜか認識しません。 KCatchでは以下の表示をしています。 Catch: Mon Sep 22 07:56:36 2003 ------------------------------------------------- [regist.cgi:375:die] Undefined subroutine &main::lock called. > &lock; ------------------------------------------------- regist.cgi with Perl 5.00502 for freebsd サブルーチン名には頭に & を付けて呼び出しています。 サブルーチンは、スクリプトの最後にまとめてあります。 同じサブルーチンは、他のスクリプトでも利用していますが、 エラーは出ていないのですが。 何が原因か、わかりません。 関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。 他のサブルーチンも認識しません。 KCacthの表示は同じ &main::サブルーチン名 called になっています。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • サブルーチン Perl みたいに C言語 で使うには 

    いままで数年HPを運営していたためにCGIを開発する手段として、Perl言語を使用してきました。その後、あるきっかけでC言語をするようになり、理屈上PerlとC言語が似ていました。 いままで、Perlでは開発・デバッグ等を効率よくするためサブルーチンを他のファイルにパッケージファイルとして開発していました。非常に便利でこれがC言語でも同じく使えたらいいなとつくづく思っています。 Perl言語の例 main.cgi(本体のファイル) package.pl(パッケージファイル) 本体ほファイルで実行させ、実行の途中必要なサブルーチンをパッケージファイルから呼び出します。 呼び出すには、 %渡す値=&パッケージ名::サブルーチン名; 同じようにC言語でやるときはどのようにすればいいのでしょうか?

  • サブルーチンの使い方

    こんにちは 以前 このサイトでサブルーチンを教えて頂いたのですが 今回は、このサブルーチンを使って Commandbuttonに Sheets("20年7月度").Cells(2, 6).Value = Cells(2, 6) & Mojiを 入れたいのですが、どのようにすれば いいですか? 宜しくお願い致します。 Private Sub mySub(Moji) '数字 If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & Moji Else: TextBox1.Value = TextBox1 & Moji End If End Sub Private Sub CommandButton1_Click() 'サブルーチン Call mySub("1") End Sub Private Sub CommandButton2_Click() Call mySub("2") End Sub Private Sub CommandButton3_Click() Call mySub("3") End Sub Private Sub CommandButton4_Click() Call mySub("4") End Sub Private Sub CommandButton5_Click() Call mySub("5") End Sub Private Sub CommandButton6_Click() Call mySub("6") End Sub Private Sub CommandButton7_Click() Call mySub("7") End Sub Private Sub CommandButton8_Click() Call mySub("8") End Sub Private Sub CommandButton9_Click() Call mySub("9") End Sub Private Sub CommandButton10_Click() Call mySub("0") End Sub Private Sub CommandButton11_Click() Call mySub("00") End Sub Private Sub CommandButton12_Click() Call mySub("000") End Sub

  • Perlのmyのサブルーチンの内外での宣言の違い

    Perlでmyを使う場合、サブルーチンの内外での宣言の違いについて知りたいです。 私はよくある変数をそのプログラム内全体で使う時(カウントするだけの$iみたいなものや、DBのクエリなど)は、同じ変数名をサブルーチン内で毎回宣言するのが嫌(個人的に同じことを重複するプログラムが好きではないという主義)なので、サブルーチンの外でmyを宣言するのですが、myとかはサブルーチン外で宣言するとどんな問題が生じる可能性があるのでしょうか? また毎回サブルーチン内で宣言するのと外部で宣言するのではどういった時に問題になるのでしょうか?もちろんサブルーチンの外でmy宣言した場合はサブルーチンにその変数が引き継がれることは知っています。 リファレンス部分で変わるような記述を見たことはあります。 さしあたって問題を感じでいないのです、ふと疑問に思ったのですが、どうもそれに書かれたソースが少ないので御存知の方がいればぜひ御教授願いたいです。 <例> my $hoge; sub hoge1 { $hoge = 1; } sub hoge2 { $hoge = 5; } と sub hoge1 { my $hoge = 1; } sub hoge2 { my $hoge = 5; }

    • ベストアンサー
    • Perl
  • Excel VBA サブルーチン関連

    複数のマクロが標準モジュールに書かれているとします。(例:Module1~Module10) このモジュールを順番に実行するマクロを作成したいのですが、モジュールの名前を指定してサブルーチンコールは出来ないようです。 全部のモジュールを数珠つなぎにして1つのモジュールにまとめる方法は気が進みません。 モジュールの名前を指定してサブルーチンコールするようなスマートな方法はないでしょうか?

  • 隔絶されているサブルーチン間の通信の方法

    以下のようなFortranのサブルーチンとモジュールがあります。これを見ると、サブルーチンA,Bはモジュールa,bが別なのでデータ的に隔絶されていることになります。もし、このような場合、サブルーチンA,Bの間で何らかの変数を共有するようなことをしたい場合、どのような方法があるでしょうか。サブルーチンの引数を使うのは混乱の原因になりそうなので、できればmoduleの方で処理できないかと思うのですが。 混乱しそうなところなので、やり方をいろいろ比較して見てみたいと思います。Cではグローバル変数のように全体で共有する変数を用意するのかなと思いますが。 module a end module module b end module subroutine A use a end subroutin B use b end Fortranについてはここでは特設会議室はありませんが、どこかいいところがあるでしょうか。Cの専門家はいろんなことに通じていると思うのでここにお尋ねしました。よろしくお願いします。

  • サブルーチンの使用方法

    下記のような処理をするバッチファイルを作成しています。 同じ処理をしているので、サブルーチンを使って、 もっと分かり易くまとめたいのですが、やり方がわからず困っています。 サブルーチンの概要は分かるのですが、その使い方がいまいち分かりません。 どなたか分かる方がいらっしゃれば、教えて頂きたいと思っています。 よろしくお願いします。 環境としては、Windows Server 2003です。 if  exist  C:  (   コマンド文 ) if  exist  D:  ( コマンド文 )     ・     ・     ・ 以下、『if  exist  E~Z:』として処理を行う。

  • サブルーチンについて

    下記のようなソースコードを書いたところエラーが出てしまいました。 $sum = $sample2($a); の箇所でエラーが起こっているようなのですが、解決の仕方が分かりません。 &sample1(5,'&sample2'); sub sample1 { ($a,$sample2) = @_; $sum = $sample2($a); print $sum; } sub sample2 { ($a) = @_; $b = 10; $sum = $a + $b; return $sum; } このように、サブルーチンの中に更にサブルーチンを書いて、なおかつそのサブルーチン名を一旦変数に格納して使用する場合はどのようにプログラムを書けば良いのでしょうか?? ""で囲ったりといろいろとしてもダメでした。 もちろん、$sum = $sample2($a); ではなく $sum = sample2($a); のように書けば良いとは思うのですが、一度サブルーチン名を変数に入れてから使用する場合はどのようにすれば良いのでしょうか?? ご回答の程よろしくお願い致します。

    • ベストアンサー
    • CGI
  • 複数のサブルーチンで使う定数をIf文で定義。。。

    複数のサブルーチンで使う定数をIf文で定義。。。  今晩は,質問させていただきます.どうぞよろしくお願いいたします. Win7+VB2008になります。 OSの種類によって決まる定数を複数のサブルーチンで使いたい次第で ございますが、どのように書くべきでございましょうか??? 一旦下のようにコーディングいたしまして、 Public Class Form1   Dim OS種類 as Double   Private Sub      :    Call OS調べ(OS種類)    A = OS種類 *2      :   End Sub   Private Sub      :    Call OS調べ(OS種類)    B = OS種類 *3      :   End Sub   Private Sub      :    Call OS調べ(OS種類)    C = OS種類 *4      :   End Sub   Private Sub OS調べ(OS種類)    If OS.Version.Major = 0 then     OS種類 = 3.141592    else     OS種類 = 1.0    EndIf   End Sub ・・・すべてのサブルーチンにCallを描くのもすっきりいたしませんので、 毎回Callせずに、「OS種類」を使用できるようにしたいのですが、 予め定数として書いておくにはどのようにすべきでございましょうか?? (Class宣言文直後にIf OS.Version~と書こうといたしましたところ、 「ステートメントを、メソッド本体の外側に表示することはできません」と エラーになりました。。)  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • Visual C++とVisual Fortranの変数を共用したい

    FORTRANで作成したサブルーチンを活用し、C++からコールする形でコードを再利用しようと考えています。 C++からFORTRANを呼び出すのはすぐに出来たのですが、データの引渡しで困っています。 FORTRAN側ではグローバルな変数を多数(100個以上)宣言しており、引数としては渡せないのでC++側でも同名の変数を宣言して共用し、データのアクセスをしようと目論んでいます。FORTRAN側のコードは極力触りたくありません。 しかし、FORTRANでexternに相当する宣言の仕方が分からず、うまく同じ領域を共用できるようになっていません。 具体的にどんなことをすれば良いのかご存知の方がいらっしゃいましたら、ぜひご教授願います。 宜しくお願いします。

専門家に質問してみよう