C++Builder和VC的比较
C++Builder和VC的比较
其实很久以前我就想写这篇文章,其原因一方面是因为笔者深深感觉到C++ Builder的确是一个先进与强大的程式开发工具,但更最重要的一点是,我深信C++ Builder能给公司带来巨大了商业利益与生产力的大幅提升,我可以假装没看到这几点,但是基於良心与责任我不能不花点时间来跟大家分享一下我的看法与心得。
C++ Builder的前身是Borland C++,Borland C++ 所使用的Application Framework是OWL,而OWL以物件导向的角度来看,也的确比MFC先进很多(这在学界早有定论),但是在市场上却叫好不叫座,直到Imprise(以前的Borland)推出以VCL为Application Framework的Delphi之后,这才一炮而红。
虽然Delphi的VCL非常强大与好用,但是Delphi所使用的是OOPascal语法,和C++不同,直到后来,Imprise才推出以C++为程式语言的C++ Builder,而其所使用的Application Framework正是赫赫有名的VCL。
VCL的全名是“Visual Component Library“,它是一种新一代的Application Framework,以元件化、视觉化为设计的方向。VCL的兴起,起源於OWL和MFC都日见庞大与痴肥,不利於日益复杂的程式开发趋势,於是Imprise的设计小组决定开发一套更物件导向化的Application Framework,使程式设计师能以视觉化的观念、元件重用的观念来快速设计出各式各样的应用程式,将物件导向的威力与精髓发挥的淋漓尽致,相形之下,OWL和MFC都只算过时与半子的Application Framework。
果然~C++ Builder一推出后,在微软的大军压境下以及人们西瓜靠大边的心态下,仍然引起了一阵旋风,在News上许多程式师表示它们对C++ Builder的肯定与激赏,更有人指出,根据经验,在微软的市场优势之下,Delphi和C++ Builder仍能欣欣向荣,这表示Delphi和C++ Builder的产品水准不是只赢微软产品几个百分点,而是数十至数百个百分点,否则Imprise的产品早就消失不见了。
到底C++ Builder的特性与优点在哪里呢?这对於我们公司又有什麽利弊呢?我的观点与分析如下。大家想一想,当我们使用Visual C++来开发程式的时候,最痛苦的事情是什麽?答对了~那就是GUI的设计。根据经验,通常我们利用Visual C++开发一套软体时,设计GUI所花的时间几乎占掉程式开发周期的三分之一~甚至到二分之一以上,而设计和界面无关的核心程式通常只占了不到二分之一左右至三分之二的时间,但是使用C++ Builder则可以大幅简化这个问题。C++ Builder的VCL提供大量的各式各样GUI软体元件,让我们可以将大部分的心力放在核心程式码的设计上,而不必跟Windows系统的讯息、界面去搏斗。
C++ Builder的Compiler在功能上跟Visual C++都一样,Win32 API等都可以呼叫与使用(VCL就是架构在Win32 API之上,没有不相容的问题,只是包装的更高明,也非常有弹性),你不用担心目前有什麽事情是Visual C++可以做而C++ Builder做不到的,进而拒绝使用C++ Builder,抱持这样的观点就好像为了健康而不坐汽车,却坚持骑脚踏车从淡水来上班一样因噎废食,在网路许多非常有经验的程式设计师会告诉你这是多虑了。曾有人比喻的很传神,如果Visual C++是手排车,那C++ Builder就是手自排两用车(看过三菱的Sportsmode手自排两用车吗?)。
C++ Builder的程式设计细节是清楚而透明的,除了Application Framework的运作保有神秘感之外(MFC也是),所有的程式码与档案相关的档案都是可以掌握与观看的,不像某些开发工具,程式设计师许多事情是无法掌握的,而C++ Builder 所产生的码大小与产生的时间都和Visual C++ 都是同级的(我指的是胜负差距都不大,到要一提的是,C++ Builder 3.0采用一种技术,可以使得第二次以后的Compiling速度提升五倍以上,笔者可以证实这一点)。
我的观点是,我们公司非常适合大量采用C++Builder作为程式开发工具,当然啦,为了相容性的考量和母公司有特殊要求的专案除外。由Visual C++转换到C++ Builder不是很严重与痛苦的事情,反而会觉得很快乐,这就好像开手排车人改学自排车一样,甚至可以更掌握C++ Builder的威力。
利用C++ Builder来开发程式,我们可以快速的产生程式的GUI layout和prototype,在后续调整程式界面的调整周期中也非常的方便,我个人认为至少可以比Visual C++节省三至五倍以上的时间。
除了某些特殊需求的专案之外(例如版本升级,而原来的版本是VC开发的,或者参考改写的程式码是用VC写的,事实上C++ Builder也可以支援MFC),我看不出来公司有什麽专案的规模或内容非要靠Visual C++不可,自己找罪受不说,也违反了“Build a high performance company“的目标,而将大量的资源投注在落后的工具上,程式生产力也无法巨幅提升。因此我建议公司应该大量而全面性的鼓励员工使用并熟悉C++ Builder成为第一线的程式开发工具,根据我的浅见,这样的投资不但回收快速,而且效果宏大。
简而言之,C++ Builder同时兼具C++程式语言的威力和Visual Basic这种 Rapid Development Tool的视觉化程式开发环境的便利,土法炼钢或必先利其器,决定就在你了。
参考:http://bcb.lcsoft.net/document-109.html
C++Builder和VC的比较的更多相关文章
- c++builder调用VC的dll以及VC调用c++builder的dll
解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式. 比如说__cdecl,它是标准的c方法的堆栈调用方式,就 ...
- C++Builder及VC的库相互调用
coff2omf vc.lib bc.lib implib -f xxx.lib xxx.dll dll文件为VC编译的动态库lib文件为你需要转换的c++ builder 使用的静态库. 这也是 ...
- c++builder调用vc的dll
$bcb/bin目录中有个implib.exe 把你的vc.dll和implib.exe复制到c盘根目录下 运行cmd 进入c盘根目录执行 c:\implib -a cb.lib vc.dll 会生成 ...
- C++ Builder使用VC DLL
好久没用BCB了,真的有些陌生了,当然个烂笔头吧. 1 先 implib c:\xxx.lib c:\xxx.dll 生成lib文件 2 #pragma comment(lib,"xxx.l ...
- 移植最新版libmemcached到VC++的艰苦历程和经验总结(上)
零.前言: 该篇博客的Title原计划是“在VC++中调用libmemcached的设计技巧”,可结果却事与原违,原因很简单,移植失败了.尽管结果如此,然而这3天的付出却是非常值得的,原因也很简单,收 ...
- VC++/MFC(VC6)开发技术精品学习资料下载汇总
工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...
- C++Builder 中 Enter键或者Tab键无效
VC++中或者C++Builder中 当回车键不能换行时应该就是因为自己不小心按到了键盘上的insert键,要想恢复只需要再按一下就可以了. 小经验
- 在 C++Builder 工程里调用 DLL 函数
调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...
- [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器
作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...
随机推荐
- php操作mysql数据库的基本类
代码如下 复制代码 <?php$dbhost='localhost';$dbuser='root';$dbpass='123456';$dbname='products';$connect=my ...
- gcc链接程序时出现undefined reference to""错误
如:: undefined reference to ‘mq_unlink',意思是指函数mq_unlink没有定义. 可以使用如下步骤找到该函数所在的库: 1).查找哪些库包含了或使用了该函数:gr ...
- WPF学习02:Routed Events
与传统的桌面开发相比,在事件模型上WPF引入了Routed Events,从开发者的角度上,我们获得了两个便利: 1.可以实现事件路由,即向XAML结构中的父元素路由或者是向子元素路由. 2. Rou ...
- Cisco IOS Basic CLI Configuration:Access Security 01
1. Telnet Switch Config: Switch>en Switch#conf t Enter configuration commands, one per line. En ...
- IOS开发一些资源收集
从别的地方看到的,多谢作者,现贴在这里备忘. 在线教程 iOS技术概述 我个人感觉这是开始iOS开发第一步,了解一下iOS整体的结构,有哪些支持类库.如何使用类库等等一切基础的概念性指示 iPh ...
- Quartz.net 的开源任务管理平台
Quartz.net 的开源任务管理平台 前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblog ...
- 【转】获取android设备 id
关于本文档 Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.在本文档结尾处提供了作为参考的示例代码片段 ...
- [转载+原创]Emgu CV on C# (三) —— Emgu CV on 均衡化
本文简要描述了均衡化原理及数学实现等理论问题,最终利用emgucv实现图像的灰度均衡. 直方图的均衡化,这是图像增强的常用方法. 一.均衡化原理及数学实现(转载) 均衡化原理及数学实现可重点参看——& ...
- EXT--columnWidth
在EXT 3.4API上没有查询到columnWidth这个配置项,但它却实实在在的在起作用,后来在ColumnLayout类查到它的信息: 上面的信息描述了采用了columnLayout布局的子面板 ...
- ubuntu中磁盘挂载与卸载
问题描述: ubuntu中磁盘的挂载和卸载 问题解决: (1)ubuntu中磁盘挂载 注: 如上所示,使用命令df查看磁盘使用情况 ...