2011-11-09 14 views
1

私はFortranを初めて使用しており、そのためにC#とFortran間のインタフェースを構築する必要があります。 C#からFortranへの引数の引き渡しは問題なく動作しますが、Fortranコード内の値を渡すことは簡単です。Fortranで関数を呼び出すときに値が正しくない

1つのFortran関数から別の関数にパラメータを渡したいこの場合、VdiFunctionRunnerからTGA_810まで、呼び出された関数には正しいパラメーター値がありません。

これは私のコードのストリップダウンバージョンです:あなたが「渡された値は、「試験」と1にする必要がありますが、デバッガで、私は(配列の最初の文字だけを見ると

module VdiFunctionRunnerMain 
    implicit none 

    contains  
    integer function VdiFunctionRunner() 
     !DEC$ ATTRIBUTES DLLEXPORT, StdCall :: VdiFunctionRunner 
     implicit none  

     CHARACTER (256) :: inXTGA, copyXTGA 
     CHARACTER (256) :: ARRAY_810(10) 

     copyXTGA = 'test'  
     nrReturnValues = tga_810(copyXTGA, 1) 
     VdiFunctionRunner = nrReturnValues 
     return 
    end function VdiFunctionRunner 

    integer function tga_810(xtga, testNr) 
     character (256), intent(in) :: xtga 
     integer, intent(in) :: testNr 
     tga_810=2 
    end function tga_810 

end module VdiFunctionRunnerMain 

t ')とtestNr = 0. コードを書く際にエラーはないと思いますか? コードが正しい場合、これがコンパイラの問題なのかどうか、誰かが知っていますか?

私はIntel 11コンパイラを使用しています。

助けを非常に感謝します。

+0

変数を印刷すると、デバッガと同じ値が得られますか? – eriktous

+0

私は間違ったことは何も見つかりません。関数tga_810の中に 'print *、xtga'と' print *、testNr'があるとどうなりますか?また、戻り値を得るために 'tga_810 = 0'のようなtga_810の値を設定する必要があります(これはあなたがthoを記述した問題に関連しているとは思わない) – yosukesabai

+0

ファイルに出力して次の結果を得ました: xtgaValue:t testNr = 0 私はスペースを入れずにそれらを書きましたが、ファイルにいくつかあります。おそらく問題の一部だと思いますか?私はここにファイルをアップロードしました:http://dl.dropbox.com/u/35743818/results.txt – thomacco

答えて

-1

Fortranコードに渡すすべてのパラメータとFortranから取得するパラメータを渡してサブルーチンを作成する必要があります。すべてのパラメータが宣言され、throught Javaのメソッド呼び出しを渡されなければなら

SUBROUTINE EXEC(param_one, param_two, result) BIND(C) 
... 
END 

: 以下の例を参照してください。

+1

これをこの質問の答えとすることを意味しましたか?それは私には関係がありません。 – francescalus

関連する問題