Создание библиотеки dll Fortran и вызов ее из C#
У меня есть функция в исполняемом файле Fortran, и мне нужно сделать его dll-файлом, чтобы я мог вызвать его функции из программы c#
FUNCTION TSAT11(P)
C ** IGNORE IMPLEMENTATION **
TSAT11 = SX*TSAT2(X) + SXL1*TSAT3-273.15
RETURN
END
P является поплавком, и функция возвращает float
дело в том, что я ничего не знаю в fortran и не вызываю DLL из C#, поэтому, пожалуйста, объясните немного больше.
Я использую Compaq Visual Fortran и C# 2008.
Спасибо за ваше время.
(Если вы хотите, вы можете увидеть полный код здесь [это программа для расчета свойств воды и водяного пара])
2 ответов
вот пример использования поплавков с одной точностью.
библиотека 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
}
}
вы можете использовать P / Invoke. Вот!--1-->статьи где приводится пример. Что касается компиляции кода Fortran в неуправляемую DLL, вы могли бы создать проект DLL в CVF.