Lazarus下面的javascript绑定另外一个版本bug修正

本文介绍了在Lazarus环境下JavaScript绑定存在的问题及修复方法。主要问题出现在fpcjs.pas单元中,涉及Delphi模式下的指针操作不当。通过调整条件编译设置,确保了不同编译模式下的正确性。

Lazarus下面的javascript绑定另外一个版本bug修正

 

 

从svn 检出的代码有几个问题

 

 

1.fpcjs.pas 单元开始有

 

{$IFDEF FPC}

{$MODE delphi}

{$ENDIF}      

 

设置的delphi模式,可是后面有这样的代码

 

  {$ifndef fpc}

    // inc(argv,i); pom := pjsval(argv^); dec(argv,i);}   // this original code does not work in delphi 7

    // pom := TArrayOfPjsval(argv)[i];                    // for some reason this is not working either, assuming type TArrayOfPjsval = array of pjsval;

    pom := pjsval(integer(argv)+i*sizeof(pjsval));        // working hack

    {$else}

 

    pom := pjsval(argv + i);

 

{$endif}      

 

注意红色的部分,其实作者是想在delphimode 使用   

  pom := pjsval(integer(argv)+i*sizeof(pjsval));        // working hack

 

可是用 

 {$ifndef fpc} 

判断是不科学的,这句判定在lazarus编译的时候会认为 

Fpc已经定义,所以执行

    pom := pjsval(argv + i);

这句,导致错误。

 

修改的方法是,最前面变成

 

{$IFDEF FPC}

{$MODE delphi}

{$DEFINE myfpc}

{$ENDIF}

               

 

增加一个定义,然后后面这里

 

  {$ifdef myfpc}

    // inc(argv,i); pom := pjsval(argv^); dec(argv,i);}   // this original code does not work in delphi 7

    // pom := TArrayOfPjsval(argv)[i];                    // for some reason this is not working either, assuming type TArrayOfPjsval = array of pjsval;

    pom := pjsval(integer(argv)+i*sizeof(pjsval));        // working hack

    {$else}

 

    pom := pjsval(argv + i);

 

    {$endif}       

 

让他在delphi模式的时候执行 delphi 模式的指针操作。

 

 

Fpcjs源码库的来源是

http://code.google.com/p/fpcjs/

转载于:https://www.cnblogs.com/stevenlaz/p/3277125.html

由于lazarus中的例子: lazarus\fpc\2.6.0\source\packages\fcl-web\examples\webdata\demo 用的extjs是3.4版,在新的extjs4.2环境下不能运行,费了好大劲,终于搞定。期间到laz英文论坛提问,可能跟我英文差有关吧,一个回答的都没有。搞定后,版主又要我进行了“ open a new issue in the bugtracker and add a diff with the changes ”。本着互助、共享的原则,整个东西放到lazarus中文社区论坛,欢迎大家不断改善源码,提高性能,并且将改善后的源码进行共享。 我的环境:winxp,lazarus1.1,fpc2.6.0,apache2.2,extjs4.2。 不要犯怵,安装配置很简单,运行这个demo一行代码都不需要编写。后面我会详细讲安装运行方法。 安装配置: 1、安装Apache。下载地址:http://www.fayea.com/apache-mirror//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi 其他版本我没试过,高版本的应该可以。 我安装到了D:\apache2.2 2、下载安装Extjs4.2。下载地址:http://cdn.sencha.io/ext-4.2.0-beta.zip?ref=extjs.org.cn 下载后,解压缩,文件夹复制到 D:\apache2.2\htdocs\,然后改名为Ext。 3、下载附件。 原来的lazarus demo 源码未做任何修改,直接编译即可。编译之前需要安装weblaz和lazwebextra两个包。 本文附件中已经有extgrid.exe,可以直接使用。 将extgrid.exe和users.dbf复制到 apache2.2\cgi-bin 目录下。 将附件中其余文件复制到 apache2.2\htdocs\demodbf 目录下。 好了,全部配置完成。 4、启动Apache,访问:http://localhost/demodbf/extgrid-json.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值