制作Fortran DLL并从C#调用它

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

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

P是一个浮点数,函数返回一个浮点数

在这里,我对fortran一无所知,也没有用C#调用dll,所以请再解释一下。

我正在使用Compaq Visual Fortran和C#2008。

感谢您的时间。

(如果你愿意,你可以看到完整的代码在这里 [这是一个计算水和蒸汽属性的程序])

以下是使用单精度浮点数的示例。

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 

随着调用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 } } 

你可以使用P / Invoke。 这是一篇提供示例的文章 。 至于将Fortran代码编译为非托管DLL,您可以在CVF中创建DLL项目 。