zoukankan      html  css  js  c++  java
  • Lazarus下的WINCE开发

    最近对Pascal语言有点兴趣,于是就着手研究了一番,也发现了它的确有自己独有的魅力。而自己目前所做的项目中,有很多都很CE系统有关,于是本着好奇的心理,到网上找了一番,让我发现了Lazarus,基于Free Pascal的一个IDE,其实很像Delphi之前SDI的那种IDE,不过还是有很多不同。

    Lazarus号称是编写一次代码,即可编译成不同的OS版本,这样的口号蛮好听的,不过实际上却还是会有很大的差距。本篇日志则是探讨一下,Lazarus基于FPC的WINCE程序设计,起码,我们得能把一个Form或者一个MessageBox在CE上显示出来吧!

    首先我们得把IDE下载下来,工欲善其事,必先利其器嘛!

    进入这个镜像地址:http://mirrors.iwi.me/lazarus/

    然后按照你使用的系统来下载,我使用的是Windows7 32位的,所以我下载了2.6.1版本的,如下图所示:

    image

    其中一个是用于交差编译的WINCE扩展包,一个是它的主IDE。相信通过图片上的文字应该是可以区分出来的。

    然后我们先安装主IDE,在我所下载下来的,便是:Lazarus-1.1-37902-fpc-2.6.1-20120709-win32.exe 这个文件,

    然后安装:Lazarus-1.1-38198-fpc-2.6.1-20120808-cross-arm-wince-win32.exe。

    好了,一切就绪,安装完后桌面上会有一个快捷方式,我们运行它,我安装之后,运行后它提示一个错误,不知道大家会不会出现这样的问题,它提示找不到FPC的源码,我的安装路径是:D:\lazarus,我找了下,发现它的源码路径是在fpc目录下,而不是fpc下那个版本号的文件夹里,于是我把它的路径改了下:

    image

    然后点击Start IDE启动开发环境。

    启动之后,它默认的给我们创建了一个项目,我们可以通过Project->Close Project关闭它,然后新建一个Project,这里我们新建的是Application,然后我们将它保存到一个目录下,这时候它是一个WIN32的应用程序,我们要将它改成WINCE的目标平台程序,方式如下:

    Project->Project Options->Build Modes

    image

    然后在Code Generation下,更改如下图:

    image

    其中Arm为CE的CPU架构,可以在CE的系统信息里面看到:

    image

    上图是我使用的CE系统信息,这样配置完毕,我们就可以编译程序了,如果不出意外程序编译成功,然后拷贝到CE上来运行,如果还不出意外的话,应该是没有任何效果的,但是程序它的确是运行了。发生这样的问题的原因,是我们的窗体跑到CE屏幕的外面去了,所以我们要把窗体的属性修改一下:

    image

    这些编译,再拷贝进CE应该就可以出现我们预想的窗体了:

    image

    但是这个程序体积实在是太大了:

    image

    下面来给它瘦身,在你的Lazarus安装目录下,也就是我的这个目录下:D:\lazarus\fpc\2.6.1\bin\i386-win32有一个arm-wince-strip.exe文件,这个程序可以帮我们的程序瘦身,为了方便我们在命令行下调用,我们把这个路径设置到系统的环境变量里:

    以Windows7为例,右键“计算机”->属性->高级系统设置->“高级”标签里->环境变量

    我们找到PATH这个:

    image

    然后点编辑,在最末加上那个路径,记得要用分号将前面的路径分开,然后确定就好了。

    然后在我们的项目路径下新建一个批处理文件“publish.bat”,编辑内容如下:

    arm-wince-strip.exe project1.exe
    del upxed.exe
    upx -9 -o upxed.exe project1.exe

    然后运行这个批处理,我们得到一个upxed.exe文件,这个文件已经瘦身过了,且经过了upx的压缩,upx也包括在上诉的路径里面了,所以不必再下载。

    我们再看看这个文件的大小:

    image

    这个大小还是可以接受的了。最后我们不忘记Hello World,来试试吧:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage('Hello World');
      MessageBox(Handle, 'Hello World', 'MKiller', MB_OK or MB_ICONINFORMATION);
    end;   

    不要忘记Use Windows这个单元文件,然后编译在项目的目录下,双击那个批处理,拷贝upxed.exe到CE中运行:

    image

    image

    可以看出,默认的那个ShowMessage是非常坑爹的,尽然使用文件名做得标题。

    好了,这篇文章就到这里了,给大家开辟了这样的通道,接下来怎么玩,就看大家的各自发挥了。

    作者:Sun.M
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    用JSP实现的商城购物车模块
    PHP Filesystem 函数(文件系统函数)(每日一课的内容可以从php参考手册上面来)
    PHP unlink() 函数(删除文件)
    $_SERVER['DOCUMENT_ROOT']
    thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)
    php实现字符串替换
    js私有变量
    js模仿块级作用域(js没有块级作用域私有作用域)
    unity 3d开发的大型网络游戏
    thinkphp5项目--企业单车网站(八)(文章板块要点)(删除图片)
  • 原文地址:https://www.cnblogs.com/prinsun/p/2632272.html
Copyright © 2011-2022 走看看