.NETを使用しています。ここで、
Declare Sub TEST2 Lib "C:\Documents and Settings\Administrator\My Documents\MyVB\DLL\test2\debug\test2.DLL" (ByVal A As Double, ByVal B As Double, ByVal C As Double, ByVal D As Double, ByVal F As Double)
のような形で宣言し、
Call TEST2(A, B, C, D, F)
Math.Floor(F)
FortLabel.Text =F
というふうに呼び出しているのですが、呼び出されたFの値は
0(ゼロ)となります。
どうしたら、まともな数字が呼び出されるのでしょうか?
どんな値を渡して、そのDLL内でどんな処理をしているか分からないので
0になると言うなら、そのように処理しているから、としか答えられませんね。
引数の渡し方(ByVal、ByRef)は合ってますか?
所謂、ミックスドランゲッジですネ!〜
昔は、MS-Fortran と、MS-BASIC とで行う方法が公開されていましたが、
VB.NETからだと、どこのFortranをお使いだか書かれていないので、言及
は難しいですが、マイクロソフトのもの同士でも、配列の縦横の順番とか
数値の表現方法に統一仕様では無かったので、苦労した記憶があります。
ゼロが返ってきていると言われても、デバッガー等で見れば、違うかも
しれません。
まずは、お使いのFORTRANのメーカー・バージョンをお知らせ下さい。
※ FORTRANで、一般的なWIN32 DLLが作成可能だったと思いますので
回避可能な事柄だとは思いますが・・・
※ FORTRANの方のコンパイルスイッチで吸収可能かもしれません。
マイクロソフトの方であれば、BASIC側の方であれば、スイッチが
存在しますが、VB.NETではどうか解りませんが・・・
以上。
> 呼び出されたFの値は0(ゼロ)となります。
えぇと、A, B, C, D は FORTRAN側へと渡す値で、
Fは、FORTRANから受け取る値…という事ですよね?
相手から結果を受け取りたい場合には、引数の宣言を
ByVal(値渡し)ではなく、ByRef(参照渡し)にしてみてください。
ツイート | ![]() |