国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 17:40:29
字體:
來源:轉載
供稿:網友
利用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:/EXAM1/PIC下面。

  使用絕對路徑,程序代碼如下:

  Dimt1AsInteger

  PRivateSubForm_Load()

  t1=0注釋:t1記錄時鐘事件發生的次數

  EndSub

  PrivateSubTimer1_Timer()

  t1=t1 1

  Ift1<100Then注釋:圖片共顯示100幅

  current=t1Mod8

  注釋:current表示當前應該顯示哪張圖片

  FileName$="A:/exam/pic/earth"&&current&&".jpg"注釋:圖片文件名(絕對路徑)

  Image1.Picture=LoadPicture(FileName$)注釋:顯示圖片

  Else

  End注釋:程序結束

  EndIf

  EndSub

  該程序使用絕對路徑調用外部文件(earth0.jpgfearth7.jpg),當把EXAM目錄全部內容拷貝到其它機器上,抽出軟盤后,運行程序將發生找不到文件錯誤。若采用VB.APP.PATH屬性,把形成圖片文件名的語句改寫如下:

  FileName$=VB.App.Path&&"/pic/earth"&&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&&"exam/pic/earth"&&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系統子目錄與前臺機器不一樣,然后重復以上步驟,若無誤說明該軟件已經達到了機器環境無關性的要求。否則該軟件需根據提示進行修改。該步驟保證軟件絕對沒有調用任何沒有自帶的外部文件。

  應用程序的系統無關性是軟件成敗的一個重要因素,是程序設計中需要詳細規劃的一個重要方面,同時也是程序調試的一個重點內容。本文討論的方法,稍加修改亦可適用于其它開發工具。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天等县| 乌什县| 阿坝县| 内丘县| 库车县| 肇东市| 东丽区| 郓城县| 类乌齐县| 晋城| 乌拉特中旗| 亚东县| 芷江| 康乐县| 丰镇市| 板桥市| 甘肃省| 洛阳市| 和林格尔县| 庆元县| 南投县| 区。| 靖江市| 晋宁县| 民丰县| 东兴市| 乃东县| 兰州市| 沂南县| 香格里拉县| 库车县| 益阳市| 龙南县| 克东县| 富平县| 临西县| 石泉县| 封丘县| 绩溪县| 宁河县| 双峰县|