cfortran混合編程
❶ fortran如何調用c語言函數,本人小白,求大神寫詳細點
你的想法,叫做 「混合編程」,簡稱「混編」。
混編有多種方式,一般有:
1.直接調用 C 編譯後的 exe
2.通過 DLL
3.通過靜態 lib
4.通過編譯器直接鏈接Fortran和C的obj
不管是 Fortran 還是 C 的語法,通常不會規定混編的具體內容。這些內容,是不同的編譯器自行規定的。(至少絕大多數是)
所以,具體的操作,也因你選擇的編譯器產品,因你選擇的混編方式,而有較大的不同。
所以,我建議你:
1.閱讀你使用的 C 編譯器和 Fortran 編譯器的幫助文檔,查看其中關於混合編程(mix-language)的章節。
2.如果你閱讀英文幫助有困難,至少告知你使用何種 C編譯器,何種 Fortran 編譯器。打算採用何種混編方式。
❷ 如何在C語言中調用FORTRAN生成的DLL里的函數
C語言和Fortran混合編程藉助於Fortran生成的DLL進行(採用C默認的傳址方式進行函數參數傳遞)方法和實例:
1.Fortran
生成DLL
新建Fortran
DLL程序test1.f
添加如下代碼:
! test1.f90
!
! FUNCTIONS/SUBROUTINES
exported from test1.dll:
! test1 -
subroutine
!示例沒有返回值的子常式
subroutine
test1(a,b)
! Expose subroutine test1 to
users of this DLL
!
!DEC$ ATTRIBUTES
C,DLLEXPORT::test1
! Variables
! Body of
test1
integer a,b
integer sum
sum=a+b
return
end subroutine
test1
!示例有返回值的整數四則運算
!兩數相加
function
add(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::add
integer
a,b,add
add=a+b
return
end
!兩數相減
function
abstract(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::abstract
integer
a,b,abstract
abstract=a-b
return
end
!兩數相乘
function
multiply(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::multiply
integer
a,b,multiply
multiply=a*b
return
end
!兩數相除
(需要添加考慮被除數是否為0以及能否整除的判斷)
function
divided(a,b)
implicit none
!DEC$ ATTRIBUTES
C,DLLEXPORT::divided
integer
a,b,divided
divided=a/b
return
end
編譯後生成test1.dll,test1.obj等文件。其中這兩個文件是我們在VC中調用所需要的。