用VB开发与机器环境无关的程序
2008-02-23 06:49:46来源:互联网 阅读 ()
因此要解决用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下面。
使用绝对路径,程序代码如下:
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:\exam\pic\earth" && current && ".jpg" 注释:图片文件名(绝对路径)
Image1.Picture = LoadPicture(FileName$) 注释:显示图片
Else
End 注释:程序结束
End If
End Sub
该程序使用绝对路径调用外部文件(earth0.jpg fearth7.jpg),当把EXAM目录全部内容拷贝到其它机器上,抽出软盘后,运行程序将发生找不到文件错误。若采用VB.APP.PATH属性,把形成图片文件名的语句改写如下:
FileName$ = VB.App.Path && "\pic\earth" && 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 && "exam\pic\earth" && 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文件的拷贝和注册。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash