|
我们许多童鞋会问?为什么lazarus开发的程序即使strip后还那么大,没有vc的小呢?
1.首先是lazarus的程序自带了一些常用库,没有出现在OS的api中的,比如处理png,jpg等库。
2.然后是lazarus的程序都是静态编译的,不像vc ,vc根据版本需要 mfc*.dll ,msvcp*.dll 等库文件的支持,由于OS是m$开发的,所以这些库事先放在了OS里面,我们不觉得他大而已,实际上加起来,比lazarus开发的库更大,不信你在windows xp 上安装firebird 2.1,必须要msvcp80.dll,msvcr80.dll支持,这两个库就超过1MB.
3.第三个原因是lazarus的程序的底层库实现方式是这样,比如我们常常看到代码里有这个
if FOnExit <> nil then FOnExit(Self) ;
这个的意思是某个事件有用户自定义代码,就执行。
而在VC里面,是用宏,也就是在编译期,就根据需要处理的事件消息,生成上面这句代码,用pascal表示如
#ifdef CM_EXIT
FOnEXIT(self);
#endif
所以lazarus编译的程序在这方面是要大一点点,但是基本可以忽略,那么这样做的好处是什么呢?
由于底层库自己封装了常用的message处理句柄,我们可以在程序里面动态挂接事件处理程序,比如
button1.onclick := button1Click;
而要实现这样的功能,vc必须先给这个事件消息一个空的处理句柄,然后像上面一样的处理。
也就回到了lazarus的处理方式,是一模一样的。
总结lazarus开发的程序已经足够好,足够小了,如果还是不满足,可以使用KOL,模仿的就是VC的处理模式而已。 |
评分
-
查看全部评分
|