私は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コンパイラを使用しています。
助けを非常に感謝します。
変数を印刷すると、デバッガと同じ値が得られますか? – eriktous
私は間違ったことは何も見つかりません。関数tga_810の中に 'print *、xtga'と' print *、testNr'があるとどうなりますか?また、戻り値を得るために 'tga_810 = 0'のようなtga_810の値を設定する必要があります(これはあなたがthoを記述した問題に関連しているとは思わない) – yosukesabai
ファイルに出力して次の結果を得ました: xtgaValue:t testNr = 0 私はスペースを入れずにそれらを書きましたが、ファイルにいくつかあります。おそらく問題の一部だと思いますか?私はここにファイルをアップロードしました:http://dl.dropbox.com/u/35743818/results.txt – thomacco