c# - 制作 Fortran dll 并从 C# 调用它

标签 c# dll fortran

我在 Fortran 可执行文件中有一个函数,我需要将它变成一个 dll 文件,以便我可以从 C# 程序中调用它的函数

      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。

感谢您的宝贵时间。

(如果你喜欢可以看完整代码Here [这是一个计算水和 Steam 性质的程序])

最佳答案

这是一个使用单精度 float 的例子。

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
    } 
 }

关于c# - 制作 Fortran dll 并从 C# 调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317691/

相关文章:

c# - 我想禁用按钮点击

你能帮我了解 fopen ("contact.dll"、 "r");

通过 nvidia quadro 600 gpu 模式访问时 C# DOT NET 应用程序崩溃 - nvd3dum.dll 崩溃

fortran - nvfortran 编译器有用标志的推荐

fortran - 数组中派生类型变量的 Maxval

C# 9 记录有 ToString() 的 { propertyName=value } 输出,如何从中返回记录类型?

c# - 本地文件夹的大小限制?

c# - 未找到 openid 端点

C#多态——从DLL文件加载类

c# - 如何使用 CHARACTER * 50 类型的参数将参数从 C# 传递到 FORTRAN?