用VB开发与机器环境无关的程序

请叫我神经个蛋

请叫我神经个蛋

2016-02-19 14:22

下面这个用VB开发与机器环境无关的程序教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!
利用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系统子目录与前台机器不一样,然后重复以上步骤,若无误说明该软件已经达到了机器环境无关性的要求。否则该软件需根据提示进行修改。该步骤保证软件绝对没有调用任何没有自带的外部文件。
  
  应用程序的系统无关性是软件成败的一个重要因素,是程序设计中需要详细规划的一个重要方面,同时也是程序调试的一个重点内容。本文讨论的方法,稍加修改亦可适用于其它开发工具。->

展开更多 50%)
分享

猜你喜欢

用VB开发与机器环境无关的程序

编程语言 网络编程
用VB开发与机器环境无关的程序

使用VB开发Windows环境下的串行通信程序

编程语言 网络编程
使用VB开发Windows环境下的串行通信程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

熟悉VB的集成开发环境

编程语言 网络编程
熟悉VB的集成开发环境

用VB开发应用程序如何使用INI文件

编程语言 网络编程
用VB开发应用程序如何使用INI文件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用VB实现程序的隐形

编程语言 网络编程
用VB实现程序的隐形

用VB编写抽奖程序

编程语言 网络编程
用VB编写抽奖程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MHDD检测到硬盘从320G变成600多G

MHDD检测到硬盘从320G变成600多G

命令提示符怎么打开

命令提示符怎么打开
下拉加载更多内容 ↓