便。但和 VCL 的委托模型相比,MFC 的映射方法就显得太落后了。而 Delphi 的 Object Pascal 因为没有"标准负担",语言引入了组件、事件处理、属 性等新特性。由于功夫做在编
译器级,生成的
源代码就显得十分简洁。似乎 VC 是"让框架迁就语言",而 Delphi 是"让语言迁就框架"。 我想举一个对字符串操作的封装的例子来说明 MFC 和 VCL 的优缺点。 MFC 在 中,CStringList 类有加入、获取、删除等功能,但 VCL 的 TStringList 类除了上 述功能还有排序、从逗号分隔的字串读入、流输入输出等功能。但同样的字符串
替换功能,VCL 的 StringReplace 要比 MFC 的 CString::Replace 慢 2-3 倍。 总的来说,VCL 的封装比 MFC 更为高层,更为抽象,但不可避免地带来的问题 是某些部分执行效率比 MFC 略低。这就象低级语言(如汇编)的执行效率比高级 语言(如 Basic)高,但编程效率较低。鱼和熊掌不可兼得嘛。 VCL 比之 MFC 的另一优点是对异常处理的支持, 而一大缺点是对多线程支持 差。VCL 的大部分都不是针对多线程优化的。虽说 VCL 提供了简化多线程操作 的类,但只是工作者线程(worker threads)使用起来比较简单。如果线程要和界 面打交道的话事情就变得麻烦了,因为除了应用程序的主线程,任何线程不能访 问任何可视的 VCL 部件。你不得不使用 Synchronize 方法等待主线程处理它的 消息,然后在主线程中访问 VCL 部件。而 MFC 就没有这样的限制。 稳定性与完善程度:VC 是老大哥 VC 要比 Delphi 稳定和完善。VC 的发展历史比 Delphi 长,微软的总体实力比 Inprise 强。VC 的框架 MFC 经历了那么多年的发展和完善,功能非常全面,而 且十分稳定,bug 很少。其中你可能遇到的 bug 也更少。而且有第三方的专门工 具帮助你避开这些 bug。如此规模的一个类库,能做到这一点不容易。不要小看 了这一点,很多专业程序员就是为这个选择 VC 的。因为尽管 VCL 比 MFC 的抽 象程度高,封装较为高层,但由此带来的开发效率的提高对高手来说毕竟是有限 的。而如果你遇到一个怪
问题,调试了半天,发现不是你的代码有错,而是 VCL 的 bug,你作何感想?虽说遇到这类问题的可能性很小,但对 VCL 的形象的影 响可不小。Delphi 的 IDE 太占资源,启动速度太慢,和某些显卡驱动程序冲突, VCL 中有 bug, 调试器不够健壮, 对不稳定的第三方控件没有防护措施 …… 问 题多多,在这方面 Delphi 不如 VC。希望 Inprise 能更上一层楼。顺便说一下, 我们在网上看到有些人极言 Delphi 的不稳定,说几分钟出现 20 多次非法操作。 Delphi 的确不如 Visual C++稳定,但也不至于如此呀。我估计是那位朋友的 Delphi 装了某些有问题的第三方控件,导致了 Delphi 的频频出错。不妨卸下那 些控件试试? 可移植性:立足现实,放眼未来 Inprise 正在开发 Delphi 的 Linux 版本, 代号为 Kylix。 也许通过 Kylix, VCL 用
构架编写的 Windows 程序向 Linux 移植成为可能。但这只是可能。因为在目前 Inprise 的兼容性
工作做得并不好。 低版本的 Delphi 不能使用高版本的 VCL 组件, 而高版本的 Delphi 竟然不能使用低版本的 VCL 组件。真是岂有此理,我们很少 看见
软件有不向下二进制兼容的。如果 Windows 98 不能运行 95 的
程序, Windows 95 不能运行 3.x 的程序,Win 3.x 不能运行 DOS 程序,你还会用 Windows 吗?如果 Windows 95 的程序必须经过重新编译才能在 98 下运行, 98 会卖得那么好吗?"同门兄弟"C++Builder 和 Delphi 也不能互相使用对方的组件, 甚至同一套 VCL 库的文件名也不一样。所以一个组件有 for D1/D2/D3/D4/D5/C1/C3/C4/C5 这些不同版本是常有的事,而且随着 Delphi 和
C++Builder 版本的升级可能还会增加。希望 Inprise 能先解决同门兄弟的兼容性 问题。 而微软的 VC 就没有这类问题。 MFC1.0 的程序也可以毫无障碍地在 VC6.0 下编译通过。 集成界面:宏观与微观 就大处说, 的集成界面是不如
Delphi 的。 VC Delphi 仅仅一个 Object Inspector 就可以将 VC 的一堆 Wizards 比下去,何况它还有 Code Explorer、ToDo List 等。但从小处,又可以看出 Delphi 的不成熟。比如"自动完成"功能的智能化程度 和提示详细程度不如 VC,响应速度也没有 VC 快。 Visual C++所带的 MSDN 是一部"开发者的百科全书",信息庞大,
查询方便, 这方面比 Delphi 更专业。很多帮助项都有源程序示范。 Delphi 的 OpenTools 是完全面向第三方的开放系统,开发者可以修改很多 Borland 公司自身的功能,从 IDE 的可扩充性上说 Delphi 更好。 调试:细微之处见真功 Visual C++和 Delphi 的调试功能都非常强大,同时都具有单步可视化调试、 断点跟踪、运行时改变变量、鼠标指向可以得到变量值等等功能。对 DLL 的输 入输出也能方便的管理,能够进行源码级别的调试。 相对而言,Visual C++能够更加方便地看到变量的变化情况,这包括对结构可 以展开成数据树, 从而了解每一个变量的值, 每一步调试, 变化了的变量会加红, 从而使调试更加方便。另外,Visual C++的块内存察看比 Delphi 也要方便。 当然,Delphi 也有很多体贴的细微之处,比如在线程调试的时候,Delphi 能 够很方便地察看线程的变化,Visual C++却必须要弹出