程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB開發與機器環境無關的程序

用VB開發與機器環境無關的程序

編輯:VB綜合教程
利用VisualBasic開發應用程序時,常常會遇到這樣的問題:生成的可執行文件在開發的機器上能夠運行,復制到另一台機器上則無法運行,這種現象稱之為應用程序與機器環境相關。造成這種現象主要有兩個方面的原因:一是程序在運行過程中調用了一些文件,如數據庫文件、文本文件和圖片文件等,由於路徑使用不當而無法定位;二是VisualBasic編譯成的.EXE文件並不是實際意義上的EXE文件,VisualBasic系統中的標准控件和開發過程中用到的第三方控件,都沒有包含在內。此現象可由圖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下面。
  
  使用絕對路徑,程序代碼如下:
  
  Dimt1AsInteger
  
  PrivateSubForm_Load()
  
  t1=0注釋:t1記錄時鐘事件發生的次數
  
  EndSub
  
  PrivateSubTimer1_Timer()
  
  t1=t1 1
  
  Ift1<100Then注釋:圖片共顯示100幅
  
  current=t1Mod8
  
  注釋:current表示當前應該顯示哪張圖片
  
  FileName$="A:exampicearth"&&current&&".jpg"注釋:圖片文件名(絕對路徑)
  
  Image1.Picture=LoadPicture(FileName$)注釋:顯示圖片
  
  Else
  
  End注釋:程序結束
  
  EndIf
  
  EndSub
  
  該程序使用絕對路徑調用外部文件(earth0.jpgfearth7.jpg),當把EXAM目錄全部內容拷貝到其它機器上,抽出軟盤後,運行程序將發生找不到文件錯誤。若采用VB.APP.PATH屬性,把形成圖片文件名的語句改寫如下:
  
  FileName$=VB.App.Path&&"picearth"&&current&&".jpg"注釋:形成顯示圖片的文件名
  
  這樣無論把exam目錄完全復制到任何機器,程序均能運行。
  
  2.從光盤調用文件實現與路徑無關
  
  把應用程序要調用文件放在光盤指定目錄下,應用程序發行時和該光盤的拷貝一同發行。程序運行時,直接從光盤指定目錄調用文件,故不會發生因找不到文件而出現的錯誤。由於不同機器上的光盤盤符不同,因此在開發時不能直接引用光盤的盤符,應用程序必須要先取得光盤盤符,然後再生成需要調用文件的完整文件名。
  
  取得光驅盤符可以使用API函數,也可以通過以下程序段來檢測到光驅盤符:
  
  PrivateDeclareFunctionGetDriveTypeLib"kernel32"
  
  Alias"GetDriveTypeA"(ByValnDriveAsString)AsLong注釋:聲明API函數
  
  DimdriveAsString
  
  DimaAsLong
  
  Fori=0To25
  
  drive=Chr(65 i)&&":"注釋:形成盤符符號
  
  a=GetDriveType(drive)
  
  注釋:得到盤符常數
  
  Ifa=5Then
  
  ExitFor
  
  注釋:如果是光驅則退出
  
  EndIf
  
  Next
  
  以上程序段放在需要檢測光驅的地方,通常放在Form.load事件中,光驅盤符存放在Drive變量中。檢測到光驅後,則可直接調用光盤上的文件,如上例中,若PIC目錄下的圖片文件存放在光盤上,形成文件名的語句則可以用以下語句代替:
  
  FileName$=Drive&&"exampicearth"&&current&&".jpg"注釋:形成顯示圖片的文件名
  
  這樣,我們就實現了從光盤調用文件與路徑無關了。
  
  包裝應用程序實現與系統無關
  解決了與文件路徑相關的問題後,生成的可執行文件在其它沒有安裝VisualBasic的機器中,依然無法執行。原因之一是VisualBasic具有21個標准控件,這些控件都保存在動態鏈接庫中(擴展名為DLL),VisualBasic的可執行程序中並沒有包含;原因之二是開發的應用程序可能包含了第三方控件,VisualBasic的可執行程序中也不包含它們。因此在其它機器上執行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系統子目錄與前台機器不一樣,然後重復以上步驟,若無誤說明該軟件已經達到了機器環境無關性的要求。否則該軟件需根據提示進行修改。該步驟保證軟件絕對沒有調用任何沒有自帶的外部文件。
  
  應用程序的系統無關性是軟件成敗的一個重要因素,是程序設計中需要詳細規劃的一個重要方面,同時也是程序調試的一個重點內容。本文討論的方法,稍加修改亦可適用於其它開發工具。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved