时间:2021-05-02
摘要:本文主要讨论基于Windows平台的PowerBuilder 8.0应用程序编译发布关键问题和解决方法,包括执行文件的建立、资源文件的创建、安装程序的建立及添加数据源和SQL anywhere 数据库移动处理等问题。
关键字:软件开发、PowerBuilder 8.0、应用程序发布、Setup程序制作。
引言
PowerBuilder+ODBC+SQL anywhere是目前开发数据库应用程序非常流行的模式。但PowerBuilder本身仅是一个开发工具,当一个应用程序被开发并完成调试后,我们还需对其建立可执行文件并移植到终端用户的机器上,其中ODBC的配置和SQL anywhere的安装是难点,本文论述基于Windows平台的PowerBuilder 8.0应用程序编译发布关键技术问题和解决办法。
执行文件的建立
1、编译格式的选择
PowerBuilder 8.0对生成可执行文件提供了两种编译格式:伪代码(Pcode,即pseudocode的缩写)和机器代码(Machinecode)。伪代码是一种在所有PowerBuilder 平台上支持的解释性语言,它的格式与PowerBuilder 运行库(.pbl)一样,在可执行状态下保存单个对象,其优点是方便和可移植;机器代码则是真正的完全脱离PowerBuilder 环境的可执行文件,其优点是速度快,但文件容量比较大。选择编译代码格式一般基于以下三个方面:
①速度。若目标是优化运行速度和应用强化脚本处理,则选择机器代码。要是代码中较多地使用了循环结构、浮点运算或整数算法及函数调用,机器代码将比伪代码做得更好。但伪代码的编译速度比机器代码快,特别是开发人员要快速地创建测试用的可执行文件时非常便利;
②大小。伪代码生成的文件比机器代码的小。如运行应用程序的终端机器容量紧张的话,就需要放弃较快的机器代码而选择伪代码;
③移植。伪代码对于跨平台的应用非常有用。它可以方便地跨平台(PowerBuilder 支持)使用,包括:Microsoft Windows (16位和32位)、AppleMacintosh和UNIX。机器代码是依赖于平台的,也就是说要求生成和可执行应用平台一致,不过它可以获得更好的性能。
2、动态库的建立
发布PowerBuilder 8.0应用可以将一些对象不放到可执行文件中,而放到动态库中在运行时装入,这样可以将应用程序分割成更小的模块便于管理和维护。
选择伪代码(Pcode)编译方式生成PowerBuilder动态库(.pbd文件),选择机器代码(Machinecode)方式在Windows和UNIX平台上生成动态链接库(.dll文件,如将test.pbl编译成test.dll),在machine平台上生成平台支持的共享库(如test.lib)。如果在Windows上有两个应用,那么编译成的.pbd包含一个调用全局外部函数的用户对象,为了保证正确调用函数必须为每个应用单独编译和发布.pbd文件。
当建立动态库时,将源库(.pbl文件)中所有对象的编译版本拷贝到动态库中。为了在某些库中只使用所需的对象,可以将它们放到一个标准的PowerBuilder库(.pbl)中。
在建立动态库时,PowerBuilder并不检查所有对象,只是简单地去掉对象的源格式,因此,对于一些在画笔或脚本中指定了使用资源(图形、图标或指针)的对象,若不想提供单独的资源,则必须在资源文件(.pbr)中罗列出这些资源,这样才能保证在建立动态库时包含这些资源。
动态库的建立有两种途径:一是在库管理画笔中建立;二是在工程画笔中建立工程对象时一起建立。
3、资源文件的使用
可执行文件或动态库中可以包含一些资源(图形、图标或指针),也可以将它们作为单独的资源文件(.pbr文件)保存。
(1)单独的分布资源
若某资源不包含在可执行文件或动态库中,则在执行应用程序引用它时,PowerBuilder按查询路径查找该资源,因此,必须将它与应用程序一起放在查询路径下。
Windows的查询路径为:当前目录,Windows目录,Windows的System目录和PATH环境变量中设置的所有目录。
(2)资源文件
可以使用PowerBuilder资源文件(.pbr)替代单独的资源,其中列出所有的动态分配的资源也可以包含动态分配的数据窗口对象。PowerBuilder将这些资源编译后放入可执行文件或.pbd文件中,这些资源在执行时可直接使用。
若给数据窗口控件动态分配数据窗口对象,则必须创建一个资源文件,且在可执行文件或动态库文件中包含该对象,或在一个单独的动态库中包含它。
资源文件(.pbr)是一个ASCII码文件,在其中列出了应用程序要有到的各种资源(如.bmp、.cur、.ico、.rle和.wmf文件)和数据窗口对象。使用文本编辑器(如Windows的记事本)创建一个文本文件,其中列出在应用中动态引用的资源文件,一行列出一个资源,格式如:
appico.ico appbmp1.bmp appbmp2.bmp ……
以上文件和对象都假设是在当前目录中,如果存在于另一个目录中,则必须包含所在路径,格式如:
e:\myapp\test.jpg。
在.pbr文件中指定的文件名必须与在脚本中引用的资源匹配,若引用时包含路径,则在.pbr文件中也必须包含同一路径,否则因PowerBuilder在执行时只是简单地进行字符串比较而导致无法发现该资源。
若应用程序中包含有动态引用的数据窗口,则在.pbr文件中必须包含数据窗口对象,格式如:
yapp.pbl(dw_infodisplay)
其中:myapp.pbl为应用程序库,dw_infodisplay为数据窗口对象,一般是在当前目录或指定路径。在执行时,若引用资源,PowerBuilder首先检查可执行文件,找不到再在.pbd文件中、文件查询路径的目录中查找。
在工程画笔中建立工程对象时可以为可执行文件或每一个动态库指定它使用的资源文件,也可以在库管理画笔中建立动态库时使用。
[1][2][3]下一页
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
有时,我们在编写PB应用程序时,想获得当前应用程序的路径,我们可以借助API函数来实现,下面是具体的实现源代码。//如何获得当前应用程序的路径FUNCTIONu
一、托管代码/非托管代码C#代码通过C#编译器编译成程序集,程序集由微软中间语言组成,CLR会为程序集开辟一个应用程序域,程序集就是运行在这个应用程序域里面的,
在前面的文章中,我们给出了获得应用程序当前路径的一种方法(详细参考PB中如何获得当前应用程序的路径一文),在这里使用另外一个API函数也可以实现同样的效果,下面
在编写一部分PB应用程序时,我们可能获得计算机的名称,在PB中没有提供这样的类或方法,但是我们可以借助API函数来实现,下面是具体的实现源代码。//获得当前计算
微软今天发布了EnterpriseLibrary3.0,又有新的东西可以研究了,在EnterpriseLibrary3.0中包含如下8个应用程序块:lCachi