用VB開發與機器環境無關的程序
發表時間:2024-02-23 來源:明輝站整理相關軟件相關文章人氣:
[摘要]作者: 童愛紅、譚明金 軟件的開發,必須要保證與機器環境的無關性,這是一個在開發和調試過程中都必須注意的問題。本文以Visual Basic程序設計語言為例,詳細探討了與機器環境無關的應用程序開發與測試的方法。 利用Visual Basic開發應用程序時,常常會遇到這樣的問題:生成的可執...
作者: 童愛紅、譚明金
軟件的開發,必須要保證與機器環境的無關性,這是一個在開發和調試過程中都必須注意的問題。本文以Visual Basic程序設計語言為例,詳細探討了與機器環境無關的應用程序開發與測試的方法。
利用Visual Basic開發應用程序時,常常會遇到這樣的問題:生成的可執行文件在開發的機器上能夠運行,復制到另一臺機器上則無法運行,這種現象稱之為應用程序與機器環境相關。造成這種現象主要有兩個方面的原因:一是程序在運行過程中調用了一些文件,如數據庫文件、文本文件和圖片文件等,由于路徑使用不當而無法定位;二是Visual Basic編譯成的.EXE文件并不是實際意義上的EXE文件,Visual Basic系統中的標準控件和開發過程中用到的第三方控件,都沒有包含在內。此現象可由圖1形象地加以說明。
因此要解決用VB開發的應用程序與機器環境的相關性,必須從兩個方面入手,一是保證應用程序能調用到所用文件,二是應用程序發布時同時發布所有用到的控件和DLL文件。
開發與路徑無關的應用程序
無論應用程序論開發得多么好,是否成功還取決于其能否在任何機器的任何目錄下都能運行,這就要求應用程序要自成一體,不但要包含所有用到的文件,而且還應與路徑無關。實現應用程序與路徑無關可用兩種方法:一是利用VB.APP對象的PATH屬性;二是把調用文件放在光盤上,直接調用。
1.利用VB.APP.PATH實現與路徑無關
該方法的主要思路是在調用文件時利用相對路徑,由于VB中不支持與DOS類似的相對路徑,如調用當前目錄下的“hh1.bmp”文件,寫成“hh1.bmp” 和 “.hh1.bmp“將會出錯。為解決該問題,VB提供一個VB.APP對象,該對象有個名為PATH的屬性,它記下了執行文件所在的路徑,可在運行時訪問。
用該方法創建與路徑無關應用程序的要點如下:
(1)為應用程序(項目)創建一個目錄,用以存放建立的窗體或其它文件。
�。�2)把應用程序所調用的文件放在該目錄下或者放在該目錄的子目錄下。子目錄最好按照引用文件的類型進行建立,如存放圖片的子目錄名為PIC,存放表的的目錄為DBF等。
�。�3)除包含在可執行文件中的文件(如在設計時圖片框加載的圖片)外的其它文件,調用一律采用相對路徑而禁用絕對路徑。
這樣在復制應用程序的時候,只要把應用程序目錄下的所有文件(包括子目錄)復制到任意目錄下,應用程序都不會發生因找不到文件而產生的錯誤。
以下是一個程序實例,該實例顯示一系列的角度逐漸變化的地球圖片,從而形成地球轉動動畫。用VB設計一個窗體,窗體上放置一個圖片框,名為Image1(Strech=.T.),給窗體加一個定時器控件,控件名為Timer1(Interval=25,enabled=.t.),該項目存放在A:exam下,圖片文件存放在A:EXAM1PIC下面。
使用絕對路徑,程序代碼如下:
Dim t1 As Integer
Private Sub Form_Load()
t1 = 0 ‘t1 記錄時鐘事件發生的次數
End Sub
Private Sub Timer1_Timer()
t1 = t1 + 1
If t1 < 100 Then ‘圖片共顯示100幅
current = t1 Mod 8
‘current表示當前應該顯示哪張圖片
FileName$ = "A:exampicearth" && current && ".jpg" ‘圖片文件名(絕對路徑)
Image1.Picture = LoadPicture(FileName$) ‘顯示圖片
Else
End ‘程序結束
End If
End Sub
該程序使用絕對路徑調用外部文件(earth0.jpg?earth7.jpg),當把EXAM目錄全部內容拷貝到其它機器上,抽出軟盤后,運行程序將發生找不到文件錯誤。若采用VB.APP.PATH屬性,把形成圖片文件名的語句改寫如下:
FileName$ = VB.App.Path && "picearth" && current && ".jpg" ‘形成顯示圖片的文件名
這樣無論把exam目錄完全復制到任何機器,程序均能運行。
2.從光盤調用文件實現與路徑無關
把應用程序要調用文件放在光盤指定目錄下,應用程序發行時和該光盤的拷貝一同發行。程序運行時,直接從光盤指定目錄調用文件,故不會發生因找不到文件而出現的錯誤。由于不同機器上的光盤盤符不同,因此在開發時不能直接引用光盤的盤符,應用程序必須要先取得光盤盤符,然后再生成需要調用文件的完整文件名。
取得光驅盤符可以使用API函數,也可以通過以下程序段來檢測到光驅盤符:
Private Declare Function GetDriveType Lib "kernel32"
Alias "GetDriveTypeA" (ByVal nDrive As String) As Long ‘聲明 API函數
Dim drive As String
Dim a As Long
For i = 0 To 25
drive = Chr(65 + i) && ":" ‘形成盤符符號
a = GetDriveType(drive)
‘得到盤符常數
If a = 5 Then
Exit For
‘如果是光驅則退出
End If
Next
以上程序段放在需要檢測光驅的地方,通常放在Form.load事件中,光驅盤符存放在Drive變量中。檢測到光驅后,則可直接調用光盤上的文件,如上例中,若PIC目錄下的圖片文件存放在光盤上,形成文件名的語句則可以用以下語句代替:
FileName$ = Drive && "exampicearth" && current && ".jpg" ‘形成顯示圖片的文件名
這樣,我們就實現了從光盤調用文件與路徑無關了。
包裝應用程序實現與系統無關
解決了與文件路徑相關的問題后,生成的可執行文件在其它沒有安裝Visual Basic的機器中,依然無法執行。原因之一是Visual Basic具有21個標準控件,這些控件都保存在動態鏈接庫中(擴展名為DLL),Visual Basic的可執行程序中并沒有包含;原因之二是開發的應用程序可能包含了第三方控件,Visual Basic的可執行程序中也不包含它們。因此在其它機器上執行VB開發的應用程序,必須使該機器包含程序中所有用到的動態鏈接庫和控件文件(OCX或VBX文件),并需要把它們在Windows中加以注冊。
為了減少拷貝和注冊DLL、OCX和VBX給用戶帶來的麻煩,VB自帶了一個包裝程序,利用它給應用程序打包,生成安裝盤。包中可以包含應用程序相關文件、DLL文件、OCX文件、VBX文件等。要把程序包安裝到某臺機器上時,只需在該機器上執行Setup程序即可,由Setup程序自動完成相應的DLL、OCX和VBX文件的拷貝和注冊。
應用程序與機器環境無關性測試方法
要保證程序的機器環境的無關性,必須要進行嚴格測試。但由于在開發機器上,所有調用的文件都實際存在,DLL、OCX和VBX等文件存在并且已經注冊,所以無法進行程序的機器環境無關性測試。測試只能在其它機器上進行,可以分成以下幾步:
�。�1)另找一臺只安裝了Windows系統而沒有安裝任何其它軟件的機器,且只有Windows系統子目錄。
(2)在該機器上解包并執行程序。
(3)若執行無誤則進入下一步,否則該軟件需根據提示進行修改。該步驟保證了調用DLL、OCX和VBX的正確性,但并不能保證與路徑無關。
�。�4)改變應用程序的安裝目錄再進一步驗證路徑無關性,若無誤進入下一步,否則該軟件需根據提示進行修改。該步驟保證軟件自帶文件的調用正確性。
�。�5)另找一臺只安裝了Windows系統的機器,Windows系統子目錄與前臺機器不一樣,然后重復以上步驟,若無誤說明該軟件已經達到了機器環境無關性的要求。否則該軟件需根據提示進行修改。該步驟保證軟件絕對沒有調用任何沒有自帶的外部文件。
應用程序的系統無關性是軟件成敗的一個重要因素,是程序設計中需要詳細規劃的一個重要方面,同時也是程序調試的一個重點內容。本文討論的方法,稍加修改亦可適用于其它開發工具。