admin管理员组

文章数量:1530521

2024年5月31日发(作者:)

龙源期刊网

PowerBuilder程序编译及资源文件打包应

用研究

作者:邢小平

来源:《电脑知识与技术》2011年第21期

摘要:编译是发布PowerBuilder应用程序的最后一环,编译得好与不好影响着应用程序的

执行效率和移植性能。文章在研究总结了PowerBuilder编译发布的一些方法后,对应用程序可

执行文件编译、资源文件配置与调用、OLE程序注册、运行库选择以及数据库移植等技术细

节,提出了自己的见解。

关键词:PowerBuilder;编译;发布;资源文件;数据库移植

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)21-5130-02

Research on Compiling and Resource Files Packaging of PowerBuilder Application

XING Xiao-ping

(PLA Commanding Communications Academy, Wuhan 430010, China)

Abstract:Compiling is the last step of PowerBuilder application's deploying, the performance of

compiling influence the application's execution efficiency and migration. This paper summarizes some

methods of PowerBuilder application's compiling, presents some views on executable file's compiling,

resource files' packaging and calling, OLE program registering, runtime files choosing, database

migrating and other technology details.

Key words: PowerBuilder; compiling; deploying; resource files; database migrating

1 两种编译格式的比较

PowerBuilder的可执行文件可以编译成伪代码(P-code)格式和机器代码(Machine-code)格

式。文献[1-3]从应用程序的执行速度、大小以及移植性能等方面对两种编译方法作了详细的介

绍。需要说明的是,Machine-code编译是以P-Code为基础进行的,PowerBuilder根据P-Code

来创建C代码,并将C代码编译成为机器代码,最终生成执行文件。因此,编译后的执行程

序中,所有指令都是实际的机器代码。虽然,这样的执行文件的大小将大于P-Code,然而其

在循环结构、浮点运算、整数运算以及函数调用比P-code做得更好。

另一个需要考虑的问题是,对自己程序版权的保护问题。创建机器代码以在P-code为基

础上进行一次“二进制代码搬运”,事实上增加了反编译的难度,尤其是在反编译技术(尤其是

针对PB-PBD的反编译)盛行的今天,把应用程序编译成以C代码格式为基础的Machine-code

龙源期刊网

可执行文件,等于为自己的程序加了一把保护锁。因此,把PB程序编译成机器代码更为安全

一些。

2 资源文件的打包与调用

与应用程序一起提供给用户的还有资源文件,如图形、图标或指针文件,如果对资源文件

不作保护,就有可能被PS(如修改程序封面)。为避免这种情况发生,我们可利用

PowerBuilder资源文件编辑器对资源文件进行打包:把应用程序所用的静态资源编辑成PBR索

引,再进行压缩生成,使裸露资源变成PBD或DLL等二进制文件。面对处心积虑的修改者,

这种方法也不保险,但聊胜于无,加一层保护层总是好的。

编辑PBR索引可用Windows 记事本进行:新建并打开一个记事本文件;在编辑窗口,每

行写上一个资源文件,如:

.

. Resource

. Resource

编辑完成后,关闭并保存该文件,把该文件的扩展名改成PBR;在可执行文件编译时,调

入该PBR文件,PB最终会生成一个资源库文件,该资源库文件包含了记事本列表所记录的所

有资源。

需要注意的是,要对文件的搜索路径作正确的界定。在编辑PBR索引时,应该在每个资

源文件前面加上文件的相对路径,避免引用绝对路径,这是因为应用程序最终发布给用户,用

户机不可能与开发机具有相同的目录引用环境,如果把资源文件的路径写成绝对路径,则资源

文件有可能被错误引用。“.”代表的是“当前目录下、Resource文件夹”下的一

个名叫“” 资源文件。

在程序调用时,也存在着同样的问题,比如:

rName=文件路径+文件名

可以用“.”进行引用,前提是我们的应用程序是一个独立的系统:应用程

序本身不被其它程序外部引用或调用,即应用程序的“当前目录”环境不会改变。这是一种非常

苛刻的条件假设,我们不能够保证自己的应用程序证永远不被其它系统或程序外部调用,如果

一旦被调用,应用程序的“当前目录”立即改变,“.”就代表其它目录层次,引用就发生错误。

龙源期刊网

解决这个问题,就需要在程序编写时,事先定义一个全局变量,读取应用程序“当前目录”的绝

对路径,赋值给事先定义的全局变量,具体为:

步骤一,定义全局变量:

nvo_public_function gu_pub_func// 其中,nvo_public_function为一个自定义用户对象,包

含各种常见应用函数,见文献[4-5];

string sys_path,dir_path,app_path,tmp_path //定义系统目录、当前目录与临时目录;

步骤二,在程序的最初入口处,写上以下代码:

gu_pub_func=create nvo_public_function //实例化对象

sys_path=gu_pub__Directory_GetSystem()//读取系统目录,并赋值

dir_path=gu_pub__Directory_GetCurrent()//读取当前目录,并赋值

tmp_path=gu_pub__Directory_GetTemp() //读取临时目录,并赋值

步骤三,用dir_path全局变量代替“.”文件路径。

这样,当程序启动时,首先判断“当前目录”并给事先定义的全局变量赋值,固定了“绝对

路径”,以后无论程序被谁所调用或引用,或者应用程序最终被安装到哪个目录层次(文件

夹),应用程序最终都能正确找到资源文件。

3配置程序的运行库

PowerBuilder应用程序需要运行库的支持,使用运行库(动态连接库)可以避免将所有的

功能函数都写在一个可执行文件中,以减小可执行文件的体积[3]。文献[1]、[2]对

PowerBuilder应用程序的各种运行库作了详细的介绍。本文介绍另一种简洁的方法:用

PowerBuilder Runtime Packager工具来实时生成运行库。运行Runtime Packager工具,见图1。

该工具提供了11种常见数据库、XML、PB COM、EJB Client以及SOAP Client所需的接

口文件的打包方法,在Database Interface和Other Components面板中选取相应的条目,并点击

“生成”按钮,便能生成单一的压缩包文件,解压该压缩包便可得到我们所需的运行库文件,或

者当我们最终为程序整体打包时直接调用该压缩包。如果应用程序不大,也可以用手工的方式

选取所需的文件。具体方法可参阅文献[2],本文不再赘述。

龙源期刊网

另外,对于OCX控件的注册,避免通过手工注册的方法(regsvr32),应通过程序方法来

提高应用系统的易用性。程序注册的具体语法为:

步骤一,申明外部函数:

Function long DllRegisterServer() Library ""

Function long DllUnregisterServer() Library ""

步骤二,创建并实例化OCX控件

OLETxnObject EmpObj

EmpObj = CREATE OLETxnObject

tToNewObject("Control")

4Sybase SQL Any Where数据库的移植

Sybase SQL Any Where 5.0 短小精悍,其安装文件不超过20M,该数据库系统包含了大二

进制(long binary)在内的所有数据类型,是单机版应用程序后台数据库系统不错的选择。笔

者根据长期的使用经验,总结了几点移植经验:

其一,创建数据库时,注意要避免使用日志文件(.log)。该日志文件跟踪记录了数据库

操作使用中的变化与过程,让数据出错恢复有了依据,同时该日志文件也记录了数据库系统的

安装时环境,从而让数据库文件移在植过程中麻烦不断。因此,建议在用Sybase Central创建

数据库时,避开创建日志文件(.log)。

其二,重建数据库。如果原始数据库文件已经存在日志文件(.log),则用Sybase Central

工具对数据库进行重建,具体方法为:打开Sybase CentralUtilitiesRebuild Database,导入数据

库文件,并选择不使用日志文件。重建后的数据库文件脱离了安装环境,移植不再受环境的制

约。

其三,养成作笔记的好习惯。对于每一个数据库,要作一些必要的手工记录,如登录用户

名、登录口令、表的名称、主要字段、关键字以及表与表的联接关系等。虽然这些信息都可以

用工具查到,但机器也有崩溃的时候,手工记录是任何工具都替代不了的。

5 结束语

PowerBuilder应用程序的编译与资源打包,涉及面较多。所述内容参考了许多文献资,融

合了自己的一些应用开发经验,期望能对他人有所启发。

龙源期刊网

参考文献:

[1] 张益星,罗敬. Powerbuilder应用程序的编译发布技术研究[J].计算机技术与发

展,2007,17(8):43-47.

[2] 蒋望东,林士敏. PB8.0应用程序编译发布技术研究[EB/OL].

/info/html/edu/20071022/.

[3] 中国计算机世界出版服务公司. PowerBuilder应用开发系列讲座

(33)[EB/OL]./41/

[4] PowerBuilder扩充函数集1.5文档

[EB/OL]./?boardid=79&ID=1308.

[5] PB如何获取当前的工作路径

[EB/OL]./database/pb/200812/.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

本文标签: 文件资源应用程序编译程序