源: http://blog.csdn.net/yejun52/article/details/3867561
自从2000年开始接触BCB,使用BCB作编程入门学习,一路走来,遇到了不少不大不小的问题。一晃9年过去了,BCB不再陌生,当初为问题困扰时那种手足无措的记忆也渐渐淡了。每念及此,甚有把一些心得写作文字的紧迫感。鉴于本人技术能力和文字水平之限,一直未能下决心,今天鼓起勇气做这事,好歹不论,只希望对使用BCB的后来者有些帮助。
1. 尽量将enum类型视为int类型使用
VCL库中emun类型缺省1个字节大小,而VC中enum类型缺省4个字节大小。因此一旦遇到使用BCB编译可执行文件调用VC编译动态库中的某个函数,且该函数使用enum类型输入参数的情况,问题就来了。在32位PC平台上一次入栈数据最小为4个字节,可执行文件将emum类型参数压入堆栈的4个字节中实际仅1个字节有效,高位其他3个字节内容为随机值,而动态库函数执行过程中使用了4个字节数据内容。
为避免发生上述问题,应该缺省将“Project”->“Options”->“Compiler”页面下的“Treat enum types as ints”项打勾。
2. 使用编译加速器bcc32pch
大家都知道,BCB的那个编译速度真是慢如蜗牛,让人无法忍受。好在这世上总少不了活雷锋,使用BCB编译加速器bcc32pch一定不会你失望,她可以让BCB的编译速度提高3-5倍,工程规模越大,效果越是明显。最新版是2.79,赶紧去下载吧。下载地址是:http://andy.jgknet.de/blog/?page_id=12
3. 如何跨工程(Project)进行源码级调试
在日常工作中,如何跨工程(Project)进行源码级调试这是个无法回避的问题。例如:一个应用程序工程为“prj_A”,一个动态库工程为“prj_B”,“prj_App”工程中使用“prj_B”工程创建的动态库,那如何在调试“prj_App”工程过程中自动进入“prj_B”工程源码呢?其实只要将“prj_B”工程目录下名为“prj_B.tds”(编译过程中生成)的文件复制到“prj_A”工程目录下即可。要注意的是,每次“prj_B”工程源码改动之后最好重新复制该文件,要不然调试过程中可能会出现源码行定位不准确问题。
4. 不要在动态库中使用ADO控件
不要在动态库中使用ADO控件,实际上即使想用也用不了。微软原始的ADO ActiveX控件可没这个限制,Borland一封装就不行了。曾经看过ADO控件源码,发现内部包含检测实例模块是否为可执行文件模块的代码,如否则创建失败。至于为何这么做,没有细究。
5. 不要使用ExtractFileDir函数
ExtractFileDir函数实现有bug。以下内容摘自季世平及(JSP)回复:这个函数,如果发现系统语言是远东的话,并且最后的目录名含有双字节文字(比如中文汉字)的话,且最后一个双字节文字的后面的引文数字字符个数为奇数时,才会发生这个问题。具体说,如果最后的目录名为"新建文件夹1","新建文件a夹1"之类的就会有问题,但如果是"新建文件夹12","新建文件a夹12"就不会有问题。
6. 命令行方式编译工程
假如工程名为“prj_A”,新建一个文本文件,输入以下命令:
bpr2mak -oprj_A.mak prj_A.bpr
make -B -fprj_A
如果只需“make project”,而非“build project”,那么将移除“-B”选项即可。输入完毕保存文本,将文本文件后缀名改为“.bat”,双击该文件就可以看到效果了。更多选项功能,可以参考“Borland C++Builder Help”。
7. 如何彻底移除自带indy控件
BCB自带indy控件版本过于陈旧,更多时候更好选择是安装新版本控件。安装新版本之前必须先卸载老版本控件,由于随BCB一起发布,卸载难度加大,不过还是有办法。按下面步骤一步步操作:
a.运行BCB6,卸载indy控件包,选中“Project”->“Options”->“Packets”页面下indy控件包,单击“Remove”按钮卸载。
b.假如BCB安装目录是“C:/Program Files/Borland/C++Builder6”,在C:/Program Files/Borland/C++Builder6/Include/VCL目录删除所有“id”字符为首的hpp文件,在C:/Program Files/Borland/C++Builder6/Lib/obj目录分别删除dclindy.dcp、dclindy.dcu、indy.dcp、indy.dcu文件,在C:/Program Files/Borland/C++Builder6/Bin目录删除dclindy60.bpl文件,在C:/Windows/System32目录删除indy.bpl文件。
c.卸载干净,可以安装新版控件了。
用BC 编译时发现少了一个DCLUSR.LIB
Project->Edit OpitionSource打开工程源文件
找到并删除它就可以了