:Raize 6.1.1.12完整配置與排錯)
簡介面向 Delphi 開發(fā)者的 Raize 6.1.1.12 DX10.1 Berlin 修正版組件包針對 Berlin 版安裝時 pas 錯誤導致編譯失敗的問題做了修復并重新調(diào)整配置使組件能在 RAD Studio 10.1 Berlin 環(huán)境中順利安裝使用。資源共956個文件壓縮包約10.74MB主要包含 hpp 頭文件、dcu 預編譯單元、pas 源碼、dfm 窗體定義、bmp 設計期圖像以及 dpk 包文件等覆蓋組件庫的完整編譯與運行所需。使用時可解壓至指定目錄并執(zhí)行附帶的構(gòu)建腳本即可完成安裝過程清晰適合需要快速搭建 Raize 組件環(huán)境的開發(fā)人員。目前已有330人學習下載。借助修正后的源碼和構(gòu)建腳本可避免手工排查錯誤同時完整目錄結(jié)構(gòu)也便于后續(xù)按需定制或二次開發(fā)對使用 Raize 6 的 Delphi 工程師具有實用價值。1. 安裝前的版本坑DX10.1 不等于 DirectX 10.1第一次把老項目從 Delphi XE8 往 10.1 Berlin 遷的時候我在 Raize 組件上翻了個大跟頭。工程里到處是 RxLabel、RaizeButton 這類控件裝完組件包后 IDE 直接報 “package not found”編譯列表滿屏紅連著排查了兩天才定位到是版本識別問題。包名里的 DX10.1 指的不是 DirectX 10.1而是 Delphi 10.1 Berlin這個版本號跟 XE10.1 的寫法在安裝腳本里經(jīng)常混著用選錯一個目錄后面全是白費。這篇安裝筆記按環(huán)境檢查、編譯包、注冊、排錯、驗證的順序來寫順序就是我當時踩完坑之后整理出來的可執(zhí)行流程。新手照著走能跑通熟手可以重點看第 5 章的五個排查記錄。2. 環(huán)境檢查與資源準備Delphi 10.1 Berlin 匹配度決定能不能裝裝這套包不順的時候大部分情況不是安裝包本身損壞而是 IDE 版本、包結(jié)構(gòu)、安裝路徑三者沒對齊。所以我不急著解壓、不急著點 Install先把環(huán)境確認清楚每一步才有據(jù)可查。這一章花十分鐘做完后面挑錯的時候能少走一半彎路。2.1 確認 IDE 版本DX10.1 指的是 10.1 Berlin不是 DirectX先打開 Delphi 10.1 Berlin進入 Help About 看版本號。10.1 Berlin 的 IDE 內(nèi)部版本號是 18.0Win32 編譯器版本號是 31.0。包名里的 DX10_1、Delphi18、Berlin 本質(zhì)都是指向同一個 IDE只是不同組件包作者習慣用的目錄名不一樣。Delphi XE10.1 是 10.1 Berlin 在更名過程中的早期叫法安裝腳本里如果寫的是 XE10.1裝到 Berlin 上也沒問題但你必須確認目標機器裝的確實是這個版本而不是 Delphi XE10.2 或 10.2 Tokyo。版本差一個小版本編譯出來的包符號都不通用。命名內(nèi)部版本號包目錄常見寫法Delphi 10.1 BerlinIDE 18.0 / 編譯器 31.0DX10_1、Delphi18、BerlinDelphi XE10.1IDE 18.0 / 編譯器 31.0XE10.1還需要確認 IDE 的活動平臺是 Win32。Raize 6.x 的組件包是按 32 位組件庫方式編譯的在 10.1 Berlin 里用 Win64 平臺打開包編譯時會提示平臺不匹配即使勉強裝上設計期也可能只顯示占位框。打開 Tools Options Tools Platforms把當前活動平臺切到 Win32再繼續(xù)后面的步驟。2.2 檢查安裝包解壓后先看目錄再決定怎么裝拿到 Raize 6.1.1.12 修正版后先不要急著雙擊什么 Install.exe。這類修正版通常已經(jīng)把原版安裝器拆開改成了手動編譯注冊的模式解壓后你會看到幾個固定目錄。先確認下面幾個目錄都在缺了哪一塊后面裝到一半就會卡住。Sources組件源碼目錄設計器定位和調(diào)試用必查。Packages按 Delphi 版本分子目錄存放的 dpk 包工程核心目錄。Compiled 或 Bpl存放編譯后的 bpl / dcp 文件有些版本會預先編好一份。Examples示例工程可以不裝但建議留著對照驗證。Readme.txt 或“安裝說明.txt”修正版作者通常會把改動點寫在這里先看。同時認識一下這幾種文件類型后面會反復用到擴展名作用注意事項.dpkDelphi 包工程編譯入口先編譯它.bpl編譯生成的包二進制文件由 IDE 或系統(tǒng)加載.dcp包符號文件必須能被 IDE 在 Library 路徑中找到.dcu單元編譯產(chǎn)物與源碼路徑配套不能單獨分發(fā).pas組件源碼設計器定位時使用這里我一般不會直接用修正版預編譯好的 bpl。.bpl 對編譯器版本非常敏感你本機如果裝過 10.1 Berlin 的 Update 補丁而預編譯 bpl 是在另一個補丁版本下編的加載時就會報“對象版本不匹配”或“接口單元沖突”。寧可自己動手重編一遍花不了幾分鐘能省下后面一堆玄學問題。2.3 規(guī)劃安裝路徑三個不能放的位置安裝路徑的規(guī)劃直接決定后面編譯能不能一次過。我見過太多人的包放在中文用戶名目錄下編譯時報錯路徑亂碼還以為是包壞了。三個位置不要放不要放在 C:\Program Files (x86) 下。這個目錄有 UAC 權限保護編譯時寫入 dcu、bpl 會頻繁彈權限提示甚至靜默失敗。不要放在帶中文的路徑下。Delphi 編譯器對非 ASCII 路徑的支持一直很一般老組件包尤甚。桌面路徑如果帶中文也會踩同樣的坑。不要放在桌面或網(wǎng)盤同步目錄。網(wǎng)盤同步會鎖文件編譯時正好撞上文件占用報錯沒有任何規(guī)律。建議裝到 D 盤根目錄下的純英文目錄比如 D:\Raize61112 或 D:\RaizeComponents。整個安裝過程記錄一個固定路徑后面每次配置 Library 路徑、bpl 路徑都用這一條不要今天用 D 盤明天用 E 盤項目換臺機器打開時路徑不一致會很難排查。提示如果機器上之前裝過舊版 Raize先記下舊版本的安裝位置后面第 5 章會講怎么清理?,F(xiàn)在先確保新版本在一個干凈、獨立、純英文的目錄里。3. 安裝流程從編譯運行期包到注冊設計期包安裝順序不能亂必須先編譯運行期包再安裝設計期包。因為設計期包在 IDE 中注冊時要解析運行期包的符號順序反了IDE 會報 “package not found” 這種假錯誤看起來像是包壞了其實只是依賴沒就緒。整個流程分三步編譯 Runtime 包、注冊 Design 包、配置 Library 路徑。3.1 第一步編譯運行期包Runtime Packages區(qū)分一下兩個概念運行期包是程序運行時加載的 bpl里面是組件實現(xiàn)代碼設計期包是 IDE 設計器使用的負責把組件注冊到面板上它自身引用運行期包。所以編譯順序一定是 Runtime 在前。用 IDE 編譯的方式比較適合新手。先以管理員身份打開 Delphi 10.1 Berlin執(zhí)行 File Open找到 D:\Raize61112\Packages\DX10_1 目錄下的運行期包文件。文件名通常是 Raize 開頭、帶 Runtime 或 Run 后綴的 dpk。打開后在 Project Manager 面板里右鍵這個包節(jié)點選擇 Compile等輸出窗口出現(xiàn) BUILD SUCCESSFUL 就算過了。如果手頭有開發(fā)構(gòu)建環(huán)境也可以走命令行速度更快也更好復現(xiàn)cd /d D:\Raize61112\Packages\DX10_1 call C:\DelphiInstall\Studio\18.0\bin\rsvars.bat msbuild RaizeVCLRuntime.dpk /p:ConfigRelease /t:Build第一行進入包目錄第二行調(diào)用 Delphi 的環(huán)境變量腳本把編譯器路徑、庫路徑等設置到當前命令行第三行用 MSBuild 執(zhí)行編譯。rsvars.bat 的路徑要改成你本機 Delphi 10.1 Berlin 的實際安裝位置找不到就搜索一下它在安裝目錄的 bin 文件夾下。參數(shù)方面/p:ConfigRelease 指定按 Release 配置編譯組件包一般用 Release/t:Build 表示執(zhí)行構(gòu)建動作。如果你看到不止一個 dpk 文件文件名不是 RaizeVCLRuntime.dpk那就把文件名替換成實際包名。編譯完成后去輸出目錄確認生成了兩個文件一個 .bpl 和一個 .dcp。只有 bpl 沒有 dcp或者兩個都沒有說明 Output directory 沒配對。到 Project Manager 里雙擊包節(jié)點查看 Project Options 中的 Output directory確保它指向 D:\Raize61112\Compiled然后重新編譯一次。有人會在這里漏看導致后面設計期包安裝了卻找不到運行期符號浪費大量時間。3.2 第二步安裝設計期包Design Packages運行期包編譯好后回到 IDE 主窗口執(zhí)行 Components Install Packages。在彈出的對話框里點 Add找到設計期包對應的 bpl 文件。設計期包的文件名一般帶 Design 后綴注意別選成運行時包。選完后對話框列表里會多出一條 Raize 相關記錄組件面板上也會出現(xiàn)一個名為 Raize 的頁簽。這里有個細節(jié)Add 時選的是 bpl不是 dpk。有人直接在 Project Manager 里打開設計期 dpk 然后點右鍵 Install這也可以但我更建議用 Install Packages 對話框操作因為它能直觀看到“哪個包被加載了、來自哪個路徑”排查時方便。另外不要雙擊 bpl 文件來安裝bpl 雙擊只會一閃而過Windows 不會因此把它注冊到 Delphi 的包列表里什么都裝不上。如果安裝后組件面板沒有出現(xiàn) Raize 頁簽先檢查當前是否還開著一個含有 Raize 控件的項目。IDE 加載失敗時會鎖住包注冊流程關掉項目再裝。還有一種可能是活動平臺不在 Win32回到 2.1 節(jié)核對。這一步驟做完了設計期算是通了但離真正跑通還差最后一步路徑配置。3.3 第三步配置 Library 路徑打開 Tools Options Environment Options Delphi Options Library在 Library path 框里新增兩個路徑D:\Raize61112\Sources D:\Raize61112\Compiled第一行是源碼路徑讓 IDE 在設計器中打開含 Raize 控件的窗體時能定位到控件類的源碼文件第二行是 dcp 所在目錄讓編譯器在編譯項目時能解析到 Raize 包的符號。這兩個路徑缺一個后面都會出現(xiàn)“編譯通過但設計器打不開”“設計器能打開但編譯報錯”的奇怪組合問題。加完路徑后強烈建議重啟一次 IDE。Library 路徑的緩存不會在修改后立即全部刷新有時候面板上已經(jīng)能看到組件但一編譯就報找不到 dcu重啟后緩存重建問題自動消失。這一步很多人跳過然后在群里問“為什么我都裝好了還是編譯失敗”其實只是沒重啟。4. 配置細節(jié)bpl、dcp、源路徑三個關鍵項組件面板出來了編譯也過了并不代表這項工作結(jié)束了。真正在項目里跑一段時間你會發(fā)現(xiàn)大部分問題都集中在三件事上bpl 文件是不是在系統(tǒng)能找到的位置、dcp 文件是不是和 bpl 配套、源碼路徑是不是讓設計器認到了。這一章專門把這三個細節(jié)拆開講每一項我都踩過坑。4.1 bpl 輸出路徑與系統(tǒng) PATHbpl 本質(zhì)上是一個 Windows DLL。程序在運行時加載它Windows 會按固定順序去搜索先看 exe 所在目錄再找系統(tǒng)目錄最后按系統(tǒng) PATH 逐個找。如果你的 bpl 放在 D:\Raize61112\Compiled而系統(tǒng) PATH 里沒有這個目錄就會出現(xiàn)一個很經(jīng)典的場景IDE 里編譯運行一切正常把 exe 單獨拷到一個目錄去跑立刻彈窗“找不到 RaizeVCLRuntime.bpl”。解決方法是把 bpl 目錄加進系統(tǒng) PATH。我推薦用 PowerShell 修改機器級 PATH而不是用 setx$bplPath D:\Raize61112\Compiled $oldPath [Environment]::GetEnvironmentVariable(Path, Machine) [Environment]::SetEnvironmentVariable(Path, $oldPath ; $bplPath, Machine)第一行定義要加入的 bpl 目錄第二行讀取當前機器級 PATH第三行在原值后面追加新目錄并寫回。Machine 作用域表示對所有用戶生效修改時需要管理員權限。為什么不建議用 setxsetx 有個老毛病它會把 PATH 截斷到 1024 個字符一旦你的 PATH 原本就比較長追加完發(fā)現(xiàn)后面的路徑全丟了系統(tǒng)里一堆命令失效這個后果比裝組件失敗還難受。用 PowerShell 的 .NET 接口可以繞過長度限制。改完 PATH 后關掉當前打開的命令行窗口和 IDE重新打開一次讓環(huán)境變量刷新。如果項目要交給其他機器編譯也要在構(gòu)建機上重復這一步。另一種做法是把 bpl 復制到 exe 輸出目錄這樣單機跑沒問題但項目一多每個輸出目錄都放一份 bpl版本容易亂我一般不這么做。提示改 PATH 前先跑一遍上面的第二行命令把原值存成一個文本文件備份。改系統(tǒng)環(huán)境變量這種事有后悔藥總比沒有好。4.2 dcp 文件必須與 bpl 配套dcp 是編譯 dpk 時生成的包符號文件它記錄了這個包里所有單元的公開符號。IDE 編譯項目時如果能在 Library path 里找到 dcp就直接引用包符號編譯不會去重新編譯源碼如果找不到IDE 會退回源碼路徑去找 dcu再找不到就直接編譯源碼。這個過程看起來“也能過”但代價是你的工程對源碼的依賴變得非常強源碼目錄只要有一點變動編譯結(jié)果就跟著變出現(xiàn)那種“換個目錄就報錯”的病。我習慣把 dcp 和 bpl 放在同一個目錄里也就是 D:\Raize61112\Compiled。這樣 Library path 里只需要這一條路徑既能找到 dcp也能兼顧運行時 bpl 的查找路徑越少排查越簡單。不要做的一件事是把 dcp 復制到 Delphi 自帶的 Lib 目錄。表面上編譯速度變快了但后續(xù)麻煩很大下次 Delphi 打補丁或者你裝另一個組件包的版本時Lib 目錄被覆蓋殘留的舊 dcp 會讓 IDE 報“單元標識符重定義”或者“常量重復定義”報錯信息指向的根本不是你的代碼。檢查 dcp 是否配套我一般直接看文件的修改時間和所在目錄。在 Windows 資源管理器里搜索 Raize*.dcp如果搜出來多份只保留 D:\Raize61112\Compiled 這一份其余全部刪除再重啟 IDE。4.3 源路徑要加到 Library path 而不是 Search path設計器打開含有 Raize 控件的窗體時需要讀到控件類的源文件或至少是源路徑里的聲明。如果 Library path 里沒有加 D:\Raize61112\Sources你會看到兩種典型情況一種是窗體打開后控件變成灰色矩形屬性窗口里什么都點不了另一種是 IDE 彈窗提示 cannot find source讓你手動定位文件。Library path 和 Search path 的區(qū)別很多人分不清。Library path 是編譯器和 IDE 共用的單元搜索路徑設計器定位類聲明也用它Search path 是編譯器專用的輔助搜索路徑IDE 的設計器不一定認。所以我兩個都加Library path 用來保證源碼可見Search path 用來防止編譯器漏掉某些間接引用。路徑重復不會報錯不需要擔心。加好源路徑后有一個簡單的驗證方法在窗體設計器里右鍵一個 Raize 控件選擇 View Source不同版本菜單名可能略有差異如果能跳到對應的 .pas 文件說明源路徑生效如果跳不到回 3.3 檢查路徑有沒有寫錯、有沒有重啟 IDE。另外代碼導航用的 Browsing Path 有時候也需要同步加一條 D:\Raize61112\Sources否則 Ctrl 點擊控件屬性時同樣跳不到實現(xiàn)位置。5. 避坑與排查Raize 6.1.1.12 在 Berlin 下的 5 個常見問題這五個問題基本覆蓋了 6.1.1.12 在 10.1 Berlin 下最常翻車的點每條我都按“現(xiàn)象、原因、解決”三個步驟拆開寫。你在群里問裝機問題的時候多半也是這幾個姿勢。5.1 坑一組件面板空白現(xiàn)象Install Packages 對話框里能看到 Raize 設計期包但組件面板翻遍所有頁簽都沒有 Raize 頁。原因大概率是 Add 錯了 bpl裝成了運行時包。運行時包只提供實現(xiàn)代碼不負責注冊設計期組件所以它在包列表里但面板沒有任何變化。另一個可能是 IDE 當前活動平臺是 Win64而 bpl 是按 32 位編譯的加載被靜默跳過。解決先在 Install Packages 列表里把已經(jīng)加進來的 Raize 條目 Remove 掉重新 Add 那個帶 Design 后綴的 bpl。接著確認 Tools Options Tools Platforms 里的活動平臺是 Win32最后在組件面板右鍵選擇 Reset Component Palette強制刷新一次面板緩存。多數(shù)情況走完這三步Raize 頁就回來了。5.2 坑二編譯報 cant load package 或 package not found現(xiàn)象打開項目或啟動 IDE 時彈窗提示 Cant load package D:...\RaizeVCLDesign.bpl 或者找不到指定的模塊。原因常見的是 design 包依賴的運行時 bpl 不在這臺機器的搜索路徑里或者 bpl 文件根本不存在。設計期包加載時會連帶加載依賴的運行期包運行期包找不到設計期包也跟著加載失敗。還有一種可能是機器上裝了兩個版本的 RaizeIDE 加載時先撞到了舊包的路徑。解決在 D:\Raize61112 下搜索 Raize*.bpl確認 Runtime 和 Design 兩個包都在 Compiled 目錄里并把目錄加進 PATH見 4.1。如果搜出來多個不同位置的 bpl刪除舊的只保留 6.1.1.12 這一份。刪完后打開 IDE 的 Install Packages把設計期包先 Remove 再重新 Add讓它按新路徑重新注冊一次。5.3 坑三設計期正常運行期找不到類現(xiàn)象IDE 里拖控件毫無問題設計器也正常但程序一運行就報 Class TRaizeButton not found或者窗體加載失敗進程直接掛掉。原因項目勾選了 Build with runtime packages運行時必須能加載 Raize 運行期包。但開發(fā)機上 bpl 目錄沒有加到系統(tǒng) PATH或者發(fā)布部署時沒有把 bpl 一并帶過去。IDE 里能跑是因為 IDE 自己加載過這個包脫離 IDE 跑 exe 時系統(tǒng)找不到了。解決開發(fā)機把 D:\Raize61112\Compiled 加入 PATH重啟后再跑。發(fā)布機上把 Raize 相關的幾個 bpl 復制到 exe 同一目錄或者用安裝腳本裝到系統(tǒng)目錄。如果項目不是必須要用 runtime packages也可以在 Project Options Runtime Packages 里取消勾選讓組件以靜態(tài)鏈接方式編進 exe體積變大一點但省了分發(fā) bpl 的麻煩。5.4 坑四中文用戶名導致路徑亂碼現(xiàn)象編譯時提示 Cannot open file輸出窗口里路徑顯示成亂碼或者直接提示文件路徑非法但文件明明就在那里。原因Windows 用戶名是中文時桌面和文檔目錄都帶非 ASCII 路徑。Delphi 10.1 的編譯器對非 ASCII 路徑支持有歷史問題組件包的編譯腳本里如果有相對路徑引用拼接后就會變成亂碼。修正版雖然處理了安裝腳本但源碼工程一旦放到中文路徑下編譯仍然可能踩中。解決把安裝包和工程都放到純英文路徑下比如 D:\Raize61112 和 D:\MyProject。工程已經(jīng)在中文路徑的先用資源管理器移動到英文目錄再在 Project Manager 里調(diào)整輸出路徑。如果非要放在帶中文的用戶目錄下可以給中文用戶目錄做英文 junction 映射但這樣換一臺機器就要重配一次我試過一次就不再用了統(tǒng)一英文路徑是最省心的。5.5 坑五覆蓋安裝后舊版本殘留現(xiàn)象裝完 6.1.1.12 后啟動 IDE 很慢編譯時大量報 Duplicate unit 或 Unit 重定義指向的文件路徑既有新版本又有舊版本。原因舊版 Raize 沒有卸載干凈。安裝新包時舊 bpl、dcp 還殘留在系統(tǒng) PATH、Library path 和 Delphi 包緩存里IDE 同時加載新舊兩套組件單元符號重復注冊編譯自然沖突。解決這一步要按順序來。先在 Install Packages 里移除舊版本的設計期包再用 Everything 或資源管理器搜索 Raize*.bpl 和 Raize*.dcp按修改時間篩選把舊版本文件刪除只留 6.1.1.12 對應的那一份最后清理 Delphi 包緩存位置一般在用戶目錄的 AppData 下的 BDS 18.0 相關文件夾找到 KnownIDE 或 Package 緩存子目錄把里面 Raize 相關記錄清掉。清理前先備份目錄刪除操作比安裝更需要謹慎。重啟 IDE確認編譯不再報重復單元即可。6. 裝完怎么驗證用一個小項目把 Raize 組件跑起來裝完先別急著打開老工程用最小驗證跑一遍確認安裝是干凈可用的。這一步只花十分鐘能擋住后面一整天“明明裝好了但項目就是怪怪的”的折騰。6.1 新建 VCL 應用并拖入組件File New VCL Forms Application新建一個空窗體。在組件面板找到 Raize 頁依次拖一個 RxLabel、一個 RaizeButton、一個 RaizePanel 到窗體上。然后重點檢查對象監(jiān)視器選中控件右側(cè)屬性列表能不能完整展開能不能修改 Caption、Color 這些基礎屬性。如果屬性列表空白或者出現(xiàn)灰色的未識別對象說明源路徑配置有問題回到 4.3 再查一次。6.2 寫代碼編譯并拷出去運行給窗體加一個 FormCreate 事件輸幾行最基礎的代碼驗證運行期包procedure TForm1.FormCreate(Sender: TObject); begin RxLabel1.Caption : Raize 6.1.1.12 is ready; RaizeButton1.Caption : Click me; RaizePanel1.Color : clBtnFace; end;編譯前看一下 Project Options 里的 Runtime Packages 狀態(tài)確認你是按需要勾選或取消的。按 F9 運行窗體應該正常顯示標簽文字正確按鈕可點擊不彈任何找不到包的提示。運行沒問題后到工程輸出目錄把 exe 單獨復制到一個空目錄雙擊運行它。這一步專門驗證脫離 IDE 后 bpl 能不能被系統(tǒng)找到。如果彈缺 bpl說明 4.1 的 PATH 還沒配對回去確認。6.3 反向驗證移除源路徑后重新編譯最后做一個比“看到組件面板”更嚴格的驗證。打開 Tools Options把 Library path 里的 D:\Raize61112\Sources 臨時移除只保留 Compiled 路徑然后重新編譯剛才這個測試工程。如果能編譯通過說明項目是通過 dcp 包符號來解析 Raize 單元的而不是依賴源碼現(xiàn)編。這是安裝配置真正合格的標準。如果報錯說明當前工程還對源碼路徑有直接依賴把源路徑加回去檢查 dcp 是否真的被 IDE 找到了。驗證完再把源路徑加回來第一次重新編譯會慢一點因為 IDE 要重建部分 dcu 緩存屬于正?,F(xiàn)象。從那以后我每次裝完 Raize 6.1.1.12 修正版都強制走一遍“新建工程、拖三個控件、寫一行代碼、編譯、拷 exe 到干凈目錄運行、移除源路徑再編一次”的流程一條不過就回查對應章節(jié)。這套流程十分鐘不到但能省下后續(xù)項目里大量“明明裝好了怎么還報錯”的無效排查。希望幫到你。本文還有配套的精品資源點擊獲取