環境:vs2013+IVF 2011
有時候想把fortran寫的常用的函數編譯為DLL,以供不同的fortran exe調用,這時候應該怎樣做呢?【參考 彭國倫老師 fortran95 程序設計 書349和353頁】
下面以寫一個計算圓面積的dll來示例:
首先新建一個解決方案(solution),然后添加一個工程(project),一個解決方案下可以有多個工程,每個工程可以認為是一個大的功能區,每個都可以是一個完善的可執行軟件exe。
新建一個 fortran dynamic library類型的工程 sub:
1 subroutine SUB(S,R) 2 !程序作用是根據傳入的圓的半徑R,計算圓的面積S 3 !DEC$ ATTRIBUTES DLLEXPORT :: SUB 4 !上面的語句是編譯功能語句,DLL中可以被外界調用的函數都要寫上面的語句,聲明哪些函數可以被外界訪問,不然外界無法訪問。 5 implicit none 6 double precision S,R 7 write(*,*)"You are use subroutline in DLL" 8 S=3.141592653*R**2!計算的面積可以通過傳址傳出去 9 return 10 end 11
此時可以 點擊 生成---生成解決方案,會生成sub.lib 和 sub.dll
然后可以在同一個解決方案下新建另外一個 可執行文件類型的 工程 mainCallDll:
1 program callDll_SUB 2 implicit none 3 double precision area,r 4 r=2.0 5 call sub(area,r) 6 write(*,*)"r=",r,"area=",area 7 pause 8 stop 9 end 10
最后在mainCallDll工程上右鍵,設為啟動項,然后再右鍵本工程,添加,選擇sub工程中的sub.lib,此時可以點 擊 生成---生成解決方案。
但此時是不可以運行的,要把sub.dll復制到與 mainCallDll.exe同目錄下才行。
代碼組織結構:
------
接下來調試dll:【參考:https://blog.csdn.net/caoshangpa/article/details/78733379 https://blog.csdn.net/qianghaohao/article/details/50190905】
0. 將exe拷貝到dll生成目錄下,並設置dll工程為啟動項目。然后:
1.
2.
3.
4.