以下以C++Builder5.0为例,其它版本大同小异,其中C++builder1.0的缺省设置就是可独立运行的.
1. 在bcb的IDE环境中,按Project菜单并转到Linker页下,在linking项中有一个Use dynamic RTL选项,不要选中它.这关系到编译生成的EXE是否需要以下二个文件: borlndmm.dll和 cc3250mt.dll.如果选中Use dynamic RTL,程序运行将在程序EXE所在目录和windows系统目录等目录下搜索此二文件并装入.如果没有选中它,将不需要此二文件.不同版本的c++builder,可能cc3250mt.dll名称不一样,如cb3.0的为 cp3240mt.dll.
2. 运行时包:按Project菜单并转到Packages页下,在runtime packages项中build with runtime packages选项,如果不选中它,bcb编译时将静态链接所有用到的库,其下的编辑框内容无作用.也就是说程序不需要运行时包.如果选中它,在选项下的编辑框中可以添加或删除运行时装入的包,如果程序用到一个包中的某组件,如果此包并未在编辑框包列表中,即使Build with runtime packages是选中的,程序运行时也并不需要此运行时包,再进一步,如果选中build with runtime packages但包列表编辑框是空的,其结果与不选中buider runtime packages是一样的.对于第三方组件(包括自己编译的组件)等,其设置也是一样的.
以上二项设置改变后重新build project即可.
如果我们并不需要生成独立运行的EXE,而是想具体知道我的程序分发后运行时需要哪些包(也许build with runtime packages选中了并且下面的编辑框列入了全部的运行时包),可以参考以下的说明:
组件运行时包其它需求
Data Access页下的TDatabase,TTable等通过bde访问数据库控件vclbde50.bpl它们基于bde连接数据库,需要计算机安装了bde,及相应SQL数据库的客户端程序(dbf等本地数据库无需)
ADO页下的TAdoCommand等基于ADO连接数据库的控件:vclado50.bpl需要计算机安装了ado,可以运行bcb安装盘中的mdac_typ.exe.此页控件cb5.0版本才有.
samples页下的TIBEventAlerter等控件vclsmp50.bpl
Data controls页的TDBEdit等控件vcldb50.bpl
Midas页的TClientDataset等控件vclmid50.bpl需要Midas.dll(低版本为dbclient.dll)
Standart/Dialogs页的TButton等控件vcl50.bpl
Interbase组件页的TIBQuery等组件vclib50.bpl 需要安装interbase client才能访问interbase server.
Quickreport组件vclx50.bpl&qrpt50.bpl
............
最好是使用 install shield express for C++builder来制作安装盘,只要设置程序中使用了哪些组件,isx即可自动将所需的bpl添加到安装工程中,省时省力并且不易出错.isx也提供了bde安装功能.
其实也有一个非常简单的方法可以试出程序具体需要哪些包:在一台未安装bcb的"空白"windows下拷贝bcb设计生成的需要运行时包的程序,并将所有的运行时包(windows目录下bcb的*.bpl以及第三方组件的bpl)拷贝到程序目录,然后运行程序,逐个删除bpl,不能删除的bpl就是程序运行时所需的.
3. 不管如何,如果程序用到了通过bde来连接数据库(DataAccess页)的控件,那么在运行时就需要在windows下安装bde.如果使用了第三方组件,还要注意这些组件是否需要别的dll和其它文件.