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