2

誰かが私がここで間違っていることを指摘できますか?

FORTRAN 77 dll コード

*$pragma aux DON "DON" export parm(value*8,value*8)


      SUBROUTINE DON(DAA,DBB,DCC)
      REAL*8, DAA,DBB,DCC
      DBB=DAA+1
      DCC=DBB+1 
      RETURN
      END

C# コード

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

using System.Diagnostics;

namespace pDON
{
    class Program
    {

        [DllImport("DON.dll",
            CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall)]
        public static extern void DON(
            [MarshalAs(UnmanagedType.R8)] double DAA,
             [MarshalAs(UnmanagedType.R8)] double DBB,
            [MarshalAs(UnmanagedType.R8)] double DCC
            );

        static void Main(string[] args)
        {
            //double TIME = 100.0;
            double DAA = 5.5;
            double DBB = 7;
            double DCC = 9;
            //START( ENERIN, VAL1);
            DON(DAA, DBB, DCC);

            Console.Write("val1 = " + DBB);
            Console.Write("val2 = " + DCC);
            Debug.WriteLine("VAR = " + DBB.ToString());
            Console.Write("Press any key to exit");
            Console.ReadKey(false);
        }

    }
}

FORTRAN 77 サブルーチンを介して処理された後、DBB DCC の値を C# メイン プログラムに戻したいと考えています。

PS : fortran 77 を使用して INTENT(out) を im として使用することはできません。

4

2 に答える 2

1

提案してくれてありがとう

入力引数は値で渡し、引数を出力する必要があります...参照で渡すので、補助プラグマを「"*$pragma aux DON "DON" export parm(value*8, reference, reference)"」に変更し、それを現在働いています

再度、感謝します

于 2009-09-02T07:53:53.980 に答える
0

さて、値パラメーターを使用して Fortran 関数を呼び出しています。そこから値を取得するには、参照パラメーター (ポインター) を使用する必要があります。

または、2 つの値を含む fortran コードから strcuture を返すこともできます。C# で対応する型にマーシャリングし、そこから結果を読み取る必要があります。

しかし、私は fortran について何も考えておらず、私の提案の 1 つでも機能するかどうかを心配しています。

于 2009-09-02T06:16:41.010 に答える