10

Fortran 実行可能ファイルに関数があり、C# プログラムから関数を呼び出すことができるように、それを dll ファイルにする必要があります。

      FUNCTION TSAT11(P) 
C     ** IGNORE IMPLEMENTATION **
      TSAT11 = SX*TSAT2(X) + SXL1*TSAT3-273.15 
      RETURN 
      END 

P は float で、関数は float を返します

ここで、fortran についても C# からの dll の呼び出しについても何も知らないので、もう少し説明してください。

Compaq Visual Fortran と C# 2008 を使用しています。

お時間をいただきありがとうございます。

(よろしければ、ここで完全なコードを見ることができます[これは、水と蒸気の特性を計算するプログラムです])

4

2 に答える 2

11

単精度浮動小数点数を使用した例を次に示します。

Fortran ライブラリには以下が含まれます。

FUNCTION TSAT11(P) 
!DEC$ ATTRIBUTES ALIAS:'TSAT11' :: TSAT11
!DEC$ ATTRIBUTES DLLEXPORT :: TSAT11
!DEC$ ATTRIBUTES VALUE :: P
REAL, INTENT(IN) :: P   
REAL :: TSAT11
    ! Examle calculation
    TSAT11 = P - 273.15
RETURN 
END FUNCTION

呼び出し機能付き

class Program
{
    [DllImport("calc.dll")]
    static extern float TSAT11(float P);

    static void Main(string[] args)
    {
        float p = 300f;
        float t = TSAT11(p);
        // returns 26.8500061
    } 
 }

配列の場合も同様 (サイズを宣言する必要があります)

FUNCTION TSAT12(P,N) 
!DEC$ ATTRIBUTES ALIAS:'TSAT12' :: TSAT12
!DEC$ ATTRIBUTES DLLEXPORT :: TSAT12
!DEC$ ATTRIBUTES VALUE :: N
INTEGER, INTENT(IN) :: N
REAL, INTENT(IN) :: P(N)
REAL :: TSAT12
    ! Examle calculation
    TSAT12 = SQRT( DOT_PRODUCT(P,P) )
RETURN 
END FUNCTION

呼び出しC#コード付き

class Program
{
    [DllImport("calc.dll")]
    static extern float TSAT12(float[] P, int N);

    static void Main(string[] args)
    {
        float[] p2=new float[] { 0.5f, 1.5f, 3.5f };
        float t2=TSAT12(p2, p2.Length);
        //returns 3.84057283
    } 
 }
于 2012-04-25T14:56:54.223 に答える
1

P/Invoke を使用できます。これは、例を提供する記事です。Fortran コードをアンマネージ DLL にコンパイルする限り、CVFで DLL プロジェクトを作成できます。

于 2012-04-25T14:26:59.123 に答える