神奇好用的一點是:它 提供了 DLL 將程式碼分離出來由兩個以上的 EXE 共享的優點,但是在設計與使用時卻又 完全像是從來沒有分開過一樣。 對於 Package 中的各個單元而言,不管是類別、物件、函式、型態、常數、變數,凡是寫 在單元 interface 中的,完合符合過去使用單元的經驗與原則,作法習慣上是統一的。比較 需要注意的是以下兩件事: 【Project / Option / Package】這頁中,Build with runtime Packages 的選項要選,在它 下方填入專案用到的 Package 名稱,告知 Delphi 在編譯這個專案時,只將自己
寫的 程式碼編進 EXE 檔中即可,同時,也記錄未來這個 EXE 在執行時曉得該找到哪些 Package 一同工作。 除了 EXE,你還必須一併交給使用者額外的 DPL,就如同 EXE 用到 DLL 時你必須 一併附上 DLL 是一樣的。 接下來的問題是:到底我該交出哪些 DPL 給使用者呢?以剛才的例子來說,在 Build with runtime Packages 的選項下方我填的是「vcl30;pa」,可是這個輸入盒原本列了一大堆的 Package 名稱,我的專案每一個都用得到嗎?關於這點,你可以從表 10-9、10-10 查出來, 這兩個表看起來很大, 不過只要稍加對照一下元件盤上的各個分類標籤 大致上就沒錯了: ,
589
第二篇
SDK 基礎與 VCL
表 10-9 / Delphi 3 VCL Runtime Package 一 覽 表
Package 名稱 VCL30.DPL 單元或元件名稱
AxCtrls, Buttons, Classes, Clipbrd, Comctrls, Commctrl, Commdlg, Comobj, Comstrs, Consts, Controls, Ddeml, Dialogs, Dlgs, Dsgnintf, Dsgnwnds, Editintf, Exptintf, Extctrls, Extdlgs, Fileintf, Forms, Graphics, Grids, Imm, IniFiles, Isapi, Isapi2, Istreams, Libhelp, Libintf, Lzexpand, Mapi, Mask, Math, Menu, Messages, Mmsystem, Nsapi, Ole2I, Oleconst, Olectnrs, Olectrls, Oledlg, Penwin, Printers, Proxies, Registry, Regstr, Richedit, Shellapi, Shlobj, Stdctrls, Stdvcl, Sysutils, Tlhelp32, Toolintf, Toolwin, Typinfo, Vclcom, Virtintf, Windows, Wininet, Winsock, Winspool, Winsvc VCLX30.DPL Checklst, Colorgrd, Ddeman, Filectrl, Mplayer, Outline, Tabnotbk, Tabs Bde, Bdeconst, Bdeprov, Db, Dbcgrids, Dbclient, Dbcommon, VCLDB30.DPL Dbconsts, Dbctrls, Dbgrids, Dbinpreq, Dblogdlg, Dbpwdlg, Dbtables, Dsintf, Provider, SMintf VCLDBX30.DPL Dblookup, Report DSS30.DPL Mxarrays, Mxbutton, Mxcommon, Mxconsts, Mxdb, Mxdcube, Mxdssqry, Mxgraph, Mxgrid, Mxpivsrc, Mxqedcom, Mxqparse, Mxqryedt, Mxstore, Mxtables, Mxqvb I
NET30.DPL Cgiapp, Copyprsr, Httpapp, Isapiapp, Masks, Scktcomp, Syncobjs,