VB與Fortran的混合編程_第1頁
VB與Fortran的混合編程_第2頁
VB與Fortran的混合編程_第3頁
VB與Fortran的混合編程_第4頁
VB與Fortran的混合編程_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、VB 與Fortran 的混合編程一、 實驗?zāi)康?掌握VB 和Fortran 混合編程的方法。2掌握Fortran 中動態(tài)鏈接庫的創(chuàng)建方法。3掌握VB 中對動態(tài)鏈接庫的調(diào)用方法。二、實驗原理一般VB 與Fortran 混合編程的方法主要有兩種, 即VB 中直接調(diào)用可執(zhí)行文件(利用Shell 函數(shù)直接調(diào)用Fortran 編譯出來的可執(zhí)行文件 和利用動態(tài)鏈接庫DLL (Dynamic Link Library 與Fortran 混合編程。第一種方法比較簡單,將Fortran 源程序編譯為可執(zhí)行文件(擴展名為.exe )之后在VB 環(huán)境下用shell(函數(shù)調(diào)用即可。這種方法適合于計算量較大而交互操作

2、不多的時候。但是, Shell 函數(shù)是以異步方式執(zhí)行的, 這種執(zhí)行方式使VB 程序不能等待Fortran 程序計算結(jié)束, 而是繼續(xù)執(zhí)行后續(xù)的程序, 從而容易使最終結(jié)果出錯。第二種方法是將Fortran 源程序編譯為動態(tài)鏈接庫(擴展名為.dll ),然后在VB 環(huán)境下調(diào)用動態(tài)鏈接庫里的函數(shù)和過程來完成各項計算任務(wù)。雖然沒有第一種方法操作簡單,但是調(diào)用動態(tài)鏈接庫的方法更為靈活和實用。三、 Fortran 中動態(tài)鏈接庫(.dll 文件)的創(chuàng)建在Compaq Visual Fortran 6.5中創(chuàng)建“.Dll ”文件的步驟如下:1 創(chuàng)建dll 項目(Project )跟一般的Fortran 項目相似

3、,首先要創(chuàng)建一個dll 項目,具體步驟如下: 點擊File New ,在彈出的new 對話框中選擇Projects 項下的Dynamic Link Library ,在右側(cè)Project Name 下面的文本框中輸入項目名稱,在Location 下的文本框中選好路徑之后點擊Ok ,這樣我們就創(chuàng)建了一個空的dll 項目文件。2 在dll 項目中添加文件在剛才創(chuàng)建的dll 項目中添加一個空文件,這跟普通的Fortran 項目中添加文件的方法一樣。點擊file new ,在彈出的new 對話框中選擇Files 項,在列表框中選擇文件類型(單擊選中即可),一般選擇Fortran Fixed forma

4、t Source Files(固定格式源文件)或Fortran Free format Source Files(自由格式源文件),在右邊File 標簽下的文本框中輸入源文件名,點擊OK ,一個空的源文件就建好了,接下來可以在里面編寫Fortran 源程序了。3 創(chuàng)建子程序(過程)和函數(shù)Dll 文件是一種特殊的可執(zhí)行文件,在其源程序中沒有主程序,而是一個或多個子程序或函數(shù),我們通過調(diào)用這些子程序和函數(shù)來完成一些特定的任務(wù)。在Dll 項目中創(chuàng)建子程序和函數(shù)的方法跟一般Fortran 項目文件中的沒有太大的差別,只需在子程序或函數(shù)開始時加入如下一些微軟擴展屬性編譯偽指令即可:!MS$ attrib

5、utes dllexport!MS$ attributes alias!MS$ attributes value!MS$ attributes reference例如,如果要編寫一個計算雙精度實數(shù)加法的子程序,子程序名為subplus ,輸入?yún)?shù)為a 和b ,輸出參數(shù)為c ,則完整的源程序可以這樣寫:subroutine subplus(a,b,c!MS$ attributes dllexport : subplus!MS$ attributes alias :'subplus':subplus!MS$ attributes value:a,b!MS$ attributes r

6、eference:creal(8:a,b,cc=a+breturn end subroutine subplus一般情況下我們將輸入?yún)?shù)定義為傳遞數(shù)值方式,而將輸出變量定義為傳遞地址方式。像這樣添加一些子程序函數(shù),然后可以將他們編譯和生成dll 文件(快捷鍵是F7)。之后在該項目文件目錄下的debug 文件夾中可以找到這個以項目名稱命名的dll 文件,我們可以在VB 環(huán)境中調(diào)用它。四、 VB2005中對動態(tài)鏈接庫的調(diào)用VB 對動態(tài)鏈接庫的調(diào)用如同對普通子程序或函數(shù)的調(diào)用,在調(diào)用之前必須先對Dll 中的子程序或函數(shù)聲明。聲明格式如下:Public|Private Declare Sub|Func

7、tion Name Lib“Libname ”Alias“aliasname ”(arglist 例如在C 盤根目錄下有一個名為mathfunction.dll 的動態(tài)鏈接庫,我們對這個庫中名為subplus 的子程序的聲明如下:Public Declare Sub subplus Lib "C:mathfunction.dll" (ByVal a As Double , ByVal b As Double , ByRef c As Double 在聲明之后這些函數(shù)或過程就可以向普通的函數(shù)或過程一樣在VB 環(huán)境下調(diào)用了。五、 實驗內(nèi)容用Fortran 編寫一個Dll 文件,

8、其中包含計算兩個雙精度實數(shù)加、減、乘、除的過程和函數(shù),而后在VB 環(huán)境下設(shè)置簡單的界面,通過調(diào)用這些過程和函數(shù)來完成兩個輸入雙精度實數(shù)的加、減、乘、除運算,并將計算結(jié)果顯示出來。1、 Fortran 中創(chuàng)建一個名為mathfunction 的Dll 項目,在項目中添加一個名為mathfunction 的固定格式源文件,添加如下代碼:*subroutine*subroutine subplus(a,b,c!MS$ attributes dllexport : subplus!MS$ attributes alias :'subplus':subplus!MS$ attribute

9、s value:a,b!MS$ attributes reference:creal(8:a,b,cc=a+b returnend subroutine subplussubroutine subsubtract(a,b,c!MS$ attributes dllexport : subsubtract!MS$ attributes alias :'subsubtract':subsubtract!MS$ attributes value:a,b!MS$ attributes reference:creal(8:a,b,cc=a-breturnend subroutine sub

10、subtractsubroutine submultiply(a,b,c !MS$ attributes dllexport : submultiply!MS$ attributes alias :'submultiply':submultiply!MS$ attributes value:a,b!MS$ attributes reference:creal(8:a,b,cc=a*breturnend subroutine submultiplysubroutine subdivide(a,b,c !MS$ attributes dllexport : subdivide!MS

11、$ attributes alias :'subdivide':subdivide!MS$ attributes value:a,b!MS$ attributes reference:creal(8:a,b,cc=a/breturn end subroutine subdivide*subroutine*而后在項目中另添加一個名為mathfunction2的固定格式源文件,添加如下代碼:*function*function funplus(a,b!MS$ attributes dllexport : funplus!MS$ attributes alias :'funp

12、lus':funplus!MS$ attributes value:a,breal(8:a,b,funplusfunplus=a+breturnend function funplusfunction funsubtract(a,b!MS$ attributes dllexport : funsubtract!MS$ attributes alias :'funsubtract':funsubtract!MS$ attributes value:a,breal(8:a,b,funsubtractfunsubtract=a-b returnend function fun

13、subtractfunction funmultiply(a,b!MS$ attributes dllexport : funmultiply!MS$ attributes alias :'funmultiply':funmultiply!MS$ attributes value:a,breal(8:a,b,funmultiplyfunmultiply=a*breturnend function funmultiplyfunction fundivide(a,b!MS$ attributes dllexport : fundivide!MS$ attributes alias

14、:'fundivide':fundivide!MS$ attributes value:a,breal(8:a,b,fundividefundivide=a/breturn end function fundivide *function*編寫好源代碼后編譯生成Dll 文件。隨后我們會在該項目所在目錄下的debug 文件夾中找到這個名為mathfunction.dll 的文件。將這個Dll 文件拷貝到C:WINDOWSsystem。2 在VB2005中新建一個名為vb_fortran的Windows Application項目,設(shè)計界面,添加三個Label ,三個Textbox

15、 和四個Button ,在代碼編輯器中輸入以下代碼:Public Class Form1Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button1.ClickDim a As DoubleDim b As DoubleDim c As Doublea = CDbl (TextBox1.Textb = CDbl (TextBox2.Text'Call subplus(a, b, cc = funplus(a, bTextBox3.Text = cE

16、nd SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button2.ClickDim a As DoubleDim b As DoubleDim c As Doublea = CDbl (TextBox1.Textb = CDbl (TextBox2.Text'Call subsubtract(a, b, cc = funsubtract(a, bTextBox3.Text = cEnd SubPrivate Sub Button3_Clic

17、k(ByVal sender As System.Object, ByVal e AsSystem.EventArgs Handles Button3.ClickDim a As DoubleDim b As DoubleDim c As Doublea = CDbl (TextBox1.Textb = CDbl (TextBox2.Text'Call submultiply(a, b, cc = funmultiply(a, bTextBox3.Text = cEnd SubPrivate Sub Button4_Click(ByVal sender As System.Object

18、, ByVal e As System.EventArgs Handles Button4.ClickDim a As DoubleDim b As DoubleDim c As Doublea = CDbl (TextBox1.Textb = CDbl (TextBox2.Text'Call subdivide(a, b, cc = fundivide(a, bTextBox3.Text = cEnd SubEnd Class上面的代碼也很簡單。代碼中將對過程的調(diào)用注釋掉了,因為這里對過程和對函數(shù)的調(diào)用結(jié)果是一樣的,任選其一都可以,注意調(diào)用的格式就可以了。在項目文件中添加一個模塊文件

19、,輸入以下代碼:Module Module1Public Declare Sub subplus Lib "mathfunction.dll" (ByVal a As Double ,ByVal b As Double , ByRef c As Double Public Declare Sub subsubtract Lib "mathfunction.dll" (ByVal a As Double , ByVal b As Double , ByRef c As Double Public Declare Sub submultiply Lib &q

20、uot;mathfunction.dll" (ByVal a As Double , ByVal b As Double , ByRef c As Double Public Declare Sub subdivide Lib "mathfunction.dll" (ByVal a As Double , ByVal b As Double , ByRef c As Double Public Declare Function funplus Lib "mathfunction.dll" (ByVal a As Double , ByVal b As Double As DoublePublic Declare Function funsubtract Lib "mathfunction.dll" (ByVal a As Double , ByVal b As Double As DoublePublic Declare Function funmultiply Lib "mathfunction.dll" (ByVal a As Double , ByVal b As Double As DoublePublic

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論