我在Fortran可执行文件中有一个函数,我需要把它变成一个dll文件,所以我可以从C#程序中调用它的函数
FUNCTION TSAT11(P)
C ** IGNORE IMPLEMENTATION **
TSAT11 = SX*TSAT2(X) + SXL1*TSAT3-273.15
RETURN
END
Run Code Online (Sandbox Code Playgroud)
P是一个浮点数,函数返回一个浮点数
这里的东西我在fortran中什么都不知道,也没有用C#调用dll,所以请再解释一下.
我正在使用Compaq Visual Fortran和C#2008.
感谢您的时间.
(如果你愿意,你可以看到完整的代码在这里 [这是一个计算水和蒸汽属性的程序])
ja7*_*a72 10
以下是使用单精度浮点数的示例.
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
Run Code Online (Sandbox Code Playgroud)
有了调用功能
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
}
}
Run Code Online (Sandbox Code Playgroud)
类似的数组(必须声明大小)
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
Run Code Online (Sandbox Code Playgroud)
与调用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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6584 次 |
| 最近记录: |