FORTRANで作成したサブルーチンをVBで呼び出すには?


TG  2003-07-17 01:50:06  No: 78660

.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(ゼロ)となります。
どうしたら、まともな数字が呼び出されるのでしょうか?


nanashi  2003-07-17 02:26:30  No: 78661

どんな値を渡して、そのDLL内でどんな処理をしているか分からないので
0になると言うなら、そのように処理しているから、としか答えられませんね。
引数の渡し方(ByVal、ByRef)は合ってますか?


岡田 之仁  2003-07-17 04:45:16  No: 78662

所謂、ミックスドランゲッジですネ!〜
昔は、MS-Fortran と、MS-BASIC とで行う方法が公開されていましたが、
VB.NETからだと、どこのFortranをお使いだか書かれていないので、言及
は難しいですが、マイクロソフトのもの同士でも、配列の縦横の順番とか
数値の表現方法に統一仕様では無かったので、苦労した記憶があります。

ゼロが返ってきていると言われても、デバッガー等で見れば、違うかも
しれません。

まずは、お使いのFORTRANのメーカー・バージョンをお知らせ下さい。

※  FORTRANで、一般的なWIN32 DLLが作成可能だったと思いますので
    回避可能な事柄だとは思いますが・・・

※  FORTRANの方のコンパイルスイッチで吸収可能かもしれません。
    マイクロソフトの方であれば、BASIC側の方であれば、スイッチが
    存在しますが、VB.NETではどうか解りませんが・・・

以上。


魔界の仮面弁士  2003-07-17 08:47:48  No: 78663

> 呼び出されたFの値は0(ゼロ)となります。
えぇと、A, B, C, D は FORTRAN側へと渡す値で、
Fは、FORTRANから受け取る値…という事ですよね?

相手から結果を受け取りたい場合には、引数の宣言を
ByVal(値渡し)ではなく、ByRef(参照渡し)にしてみてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加