以下以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和其它文件.