在pb中导入*.sr*文件时,老是出错,总是提示少这个,缺那个,怎么办?

 在pb中导入*.sr*文件时,老是出错,总是提示少这个,缺那个,怎么办?

PB-IDE不同于其他的IDE,其他的如c++等ide均不是实时编译的,所以直到点编译时才会提示错误行;而PB不同,一旦有错误就无法导入和保存入库。

*大家注意到IDE中debug部分的小人图标,一点它就可以马上运行程序,其原理也在于在PBL中已经存在一份通过及时编译而生成的二进制,这也是实时编译的好处。

在做sr导入时这个问题尤甚。那如何正确导入呢?

PB导入需要检验几个方面:1.祖先是否存在?2.外部引用的对象是否存在(当然还包括它的祖先)?3.语法是否正确?

*为什么存在问题1,2呢,因为1就是自身的type,2,就是变量或者控件的type;在oop中,如果无祖先,那自己这一级什么也不是;3就好理解,就是实时编译拦住你不让你把有错误的文件往里面import。在从低版本导入到高版本时也存在这个问题,因为语法有改动。当然高版本也可以导入低版本,前提是修正其语法的不同之处。

在做反编译导入时,遇到的最大问题就是:1.导入顺序你不知道先后,上述问题1,2,就成为拦住你的首要问题,当然如果存在语法错误,而祖先均存在,会即刻提示,但是它是不成功的,必须在外部修正语法后,才能重新导入。

当然解决的方法有两个:

1. 如果使用PB反编译大师 PB DeCompiler来导入,它会输出全局对象按继承和引用分析时产生的顺序列表(这个工具如何排定顺序呢,其实就是在分析时,遇到非系统内部定义的类型[如window,commandbutton]之外的类型,如my_toolbar时,它就将自己暂时压入栈,并提出my_toolbar这个对象来分析,而分析my_toolbar时也是如此,假设它的祖先是my_toolbar_ancestor,就必须等待my_toolbar_ancestor分析完先,大概的意义就是继承自系统内部基类的对象我们必须先分析,再分析后继的对象,直到全部分析完所有对象,取得所有对象的公共接口[properties and functions]后,才能开始分析代码并还原代码,可见,反编译工具的工作量和复杂性是相当的),你可以参考,但是因为对象太多,比如15个PBD,或者甚至80个PBD,你是很难从sr这种方式来导入完成一个巨型项目的。所以要恢复工程,首选的是直接导出PBL+Pbw+Pbt方式,然后optmize,然后再full-build方式,这是最快的最简单的方式。

当然发觉部分对象存在问题时,或者你有部分sr比如未丢失,有备份等,可以在1这种方式完成后,导入,因为其他对象已经存在,所以不会提示缺少祖先。

2. 缺少祖先等提示,这个问题不是简单可以通过调整导入顺序来搞定的,因为对象的继承和引用何其复杂,sr当时本身也是用来做少量对象在不同工程和文件之间输入和输出之用,并非用于全部的整体项目导入和导出,除非,它关闭实时编译!所以如果pbl中存在要导入对象的祖先或者是引用的外部对象的话,那导入时就非常正确而无任何提示,做法:

   a。新增一个pbw,新增一个pbt,比如默认是abc.apl。

   b。然后附加其原工程的所有的pbd上来,这样该工程其实就有了各个对象的public接口。然后首先将反编译的apl源码,粘贴到新建立的abc.apl的source edit中,保存,无误后关闭。

   c。新建pbl,名字和原来的pbd一致,或者有所区分,如inv.pbl,然后往里面导入inv.pbd中的sr文件,此时,应该是不会报错了,有错的话,可能是一些语法错误,sr导入方式,需要你的sr准确无误,所以需要你在IDE外修正。当然方法也不是没有,那就是新建一个对象,然后在source edit中粘贴,保存,报错的话,按提示位置修正,因为在ide中修正时有编译器提示,比在外部用记事本修正那是要容易得多。

3. 当然如上2的方法也用于巨型工程的逐步恢复,因为pbd很多,很难避免反编译的错误,致使IDE加载时崩溃,这时,就可以先附加PBD到工程中,再逐步附加PBL上来编译,逐个击破。走一点曲线方式来完成。亦或是只需要恢复少数几个pbl,也是采用如上2的方式,因为没必要全部的PBL都来编译,徒自增加难度。

 

以上操作如有错误敬请指正。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值