首页 / 资讯中心 / 文章详情

DevExpress VCL 20.2.6 在 Delphi 11 下的完整安装与编译指南

DevExpress VCL 20.2.6 在 Delphi 11 下的完整安装与编译指南 ★ FEATURED ARTICLE
简介面向已升级至 Delphi 11、需要为原有工程补齐第三方界面控件库的开发者这份 DevExpress VCL 20.2.6 完整源码安装包可解决国内资源版本混杂、下载后无法编译的痛点。包内以 7z 压缩体积约 473.21MB核心为可直接运行的 DxAutoInstaller.exe 安装程序及配套源码组件省去手工配置搜索路径与环境变量的繁琐环节装完即可在 D11 中调用。资源标签涵盖 DevExpressVCL、fullsource 与 Delphi11适合具备一定 VCL 开发经验、希望快速恢复既有项目界面层的中高级程序员。目前已有 520 人浏览学习说明该版本在升级迁移场景中具备一定参考价值。对于正被控件兼容性问题困扰、又不愿在多个来源间反复试错的读者这份亲测可用的安装包能显著缩短环境搭建时间把精力留给业务代码本身。1. DevExpress VCL 20.2.6 装到 Delphi 11一份能直接复现的控件包落地记录上周有个做桌面管理系统的朋友找我说他手上一个老项目要从 Delphi 10.2 迁到 Delphi 11界面里几十个表格、树、报表全靠 DevExpress VCL 撑着结果新环境一编译就报找不到单元重装控件包又卡在编译阶段。这类场景其实很典型DevExpress VCL 20.2.6 这个版本的 fullsource 安装包官方支持范围正好覆盖到 Delphi 11源码完整、非试用版装好之后 VCL 控件库、编辑器、报表、皮肤这些模块都能正常编译进项目。它解决的不是“要不要用第三方控件”的问题而是“老项目升级 IDE 后控件包怎么重新落地”的问题。适合手上维护 Delphi 桌面项目、需要完整源码可控、又不想被试用版水印和功能限制卡住的从业者。下面按我实际拆包、编译、排错的顺序讲参数和坑都落到具体位置。2. 拆包与目录结构fullsource 包到底给了什么拿到一个 fullsource 版本的控件包第一件事不是急着点安装程序而是先把目录结构和编译产物看清楚。DevExpress VCL 的 fullsource 包和试用版的差别核心就在“源码是否完整、是否带编译脚本、是否区分 IDE 版本”。20.2.6 这个版本对应 Delphi 11 的编译目标包内一般会按模块和 IDE 版本分目录理解这套组织方式后面编译报错才知道去哪找。2.1 包内模块划分与源码目录常见的目录组织是这样的根目录下有Library、Packages、Sources、Help、Bin这几类。Sources下按功能模块再分比如cxLibrary基础库、cxGrid表格、cxTreeList、cxEditors编辑器、cxScheduler日程、cxReports报表等每个模块里是.pas源码和.dcr资源。Packages下是按 IDE 版本分的.dpk/.dproj工程文件Delphi 11 对应的是带D28或Delphi11标识的那一组不同小版本命名略有差异以包内实际为准。我一般先做一次目录清点确认三件事源码目录是否完整有没有缺模块、Packages 下是否有对应 Delphi 11 的工程、Bin 下是否有预编译的.bpl。如果 Bin 里已经有对应版本的 bpl说明这个包是“源码 预编译”双份安装会快很多如果只有源码那就得自己走一遍编译流程。这一步用资源管理器看就行不需要工具。提示fullsource 包体积通常比试用版大不少解压后如果发现某个模块目录是空的或者只有.dcu没有.pas那大概率是包不完整别往下装先换包。2.2 版本对应关系20.2.6 与 Delphi 11 的匹配点版本匹配是这类控件包最容易翻车的地方。DevExpress VCL 的版本号和 Delphi 编译器版本是两套体系20.2.6 是控件库版本Delphi 11 的编译器代号是 D28对应$(BDS)下的 22.0 目录。安装包能不能用取决于它有没有为 D28 准备好包工程和编译条件。判断方法很直接打开Packages下对应目录的.dproj看ProjectVersion和DCC_Define里有没有VER360Delphi 11 的条件符号之类的定义再看Sources里有没有针对新编译器的条件编译分支。20.2.6 这个版本在源码里对 Delphi 11 的支持是有的但个别老模块可能还留着旧条件编译时会暴露出来这就是后面排错章节要处理的东西。检查项位置合格标准源码完整性Sources 各模块目录每个模块有 .pas 与 .dcrIDE 工程Packages 下 D28/Delphi11 目录存在 .dpk 与 .dproj预编译产物Bin 目录有对应版本 .bpl可选条件符号.dproj 的 DCC_Define含 VER360 等新版本符号这张表我每次装新包都会过一遍五分钟的事能省掉后面半小时的编译报错排查。2.3 安装前的环境准备清单动手之前环境要清干净。Delphi 11 的 IDE 里如果之前装过旧版 DevExpress必须先卸载干净IDE 里Component Install Packages把旧的 DevExpress 包全部 Remove再到注册表HKEY_CURRENT_USER\Software\Embarcadero\BDS\22.0\Known Packages下把残留的 DevExpress 路径删掉最后把$(BDS)\bin下旧的dcl*.bpl和dcu目录清掉。这一步不做新包编译出来的 bpl 和旧的设计期包冲突IDE 启动就报“找不到序数”或者加载失败。另外确认 Library Path 里没有指向旧版源码目录的条目编译输出目录$(BDS)\Dcp、$(BDS)\bin有写权限。环境干净了后面编译成功率会高很多这是血泪经验。3. 编译与安装从源码到 IDE 里能拖控件环境清干净之后进入正题把源码编译成设计期包design-time package和运行期包runtime package再注册进 IDE。DevExpress VCL 的包分两层运行期包给应用程序链接设计期包给 IDE 加载控件面板两者都要编。顺序不能乱先运行期后设计期。3.1 用命令行编译运行期包图形界面一个个点工程太慢我一般用msbuild批量编。Delphi 11 自带的 msbuild 在$(BDS)\bin下配合.dproj直接编。先编基础库再编依赖它的模块顺序按包内Packages目录的编号来一般有cxLibrary在前。# 进入 Delphi 11 的 bin 目录用其自带的 msbuild cd C:\Program Files (x86)\Embarcadero\Studio\22.0\bin # 编译基础运行期包Release 配置输出到统一目录 msbuild D:\DevExpress\Packages\D28\cxLibrary_R.dproj ^ /p:ConfigRelease ^ /p:PlatformWin32 ^ /p:DCC_ExeOutputD:\DevExpress\Output\bpl ^ /p:DCC_DcuOutputD:\DevExpress\Output\dcu # 依次编译表格、编辑器等依赖模块 msbuild D:\DevExpress\Packages\D28\cxGrid_R.dproj /p:ConfigRelease /p:PlatformWin32 msbuild D:\DevExpress\Packages\D28\cxEditors_R.dproj /p:ConfigRelease /p:PlatformWin32这里几个参数要说明ConfigRelease编优化版调试期可以先用Debug确认没问题PlatformWin32要和你的目标程序位数一致64 位项目要另编Win64DCC_ExeOutput和DCC_DcuOutput把 bpl 和 dcu 集中到一个目录方便后面统一加 Library Path避免散落在各处找不到。编完检查输出目录里有没有对应的.bpl和.dcp缺了就是某个模块没编过看 msbuild 的报错行号定位。3.2 设计期包的注册与 Library Path 配置运行期包编完编设计期包一般带_D后缀如cxLibrary_D.dproj设计期包会引用运行期包所以顺序不能反。编完之后要在 IDE 里注册Component Install Packages Add选中编出来的dcl*.bpl。注册成功后控件面板会出现 DevExpress 页签。Library Path 要加上前面DCC_DcuOutput指向的目录以及源码根目录有些项目直接引用源码编译不走 dcu。在Tools Options Language Delphi Library里把D:\DevExpress\Output\dcu和D:\DevExpress\Sources加进去注意放在系统路径之前避免和旧版冲突。// 验证安装是否成功新建一个 VCL 窗体放一个 cxGrid 并编译 procedure TForm1.FormCreate(Sender: TObject); begin // 能正常创建说明运行期包链接成功 cxGrid1.CreateGrid(0); cxGrid1.Levels[0].Grid.OptionsView : cxGrid1.Levels[0].Grid.OptionsView [gvIndicator]; end;这段代码的作用是验证运行期包真的被链接进来了CreateGrid创建列视图OptionsView加指示列编译通过且运行不报“找不到类”说明 bpl 和 dcu 路径都对。如果编译报Unit cxGridDBTableView not found回去查 Library Path 顺序和 dcu 输出目录。3.3 一个最小工程的链接验证装完别急着上大项目先建一个最小 VCL 工程做链接验证。新建 Application拖一个cxGrid、一个cxTextEdit、一个cxTreeList编译成 Win32 和 Win64 各一次。Win64 这一步很多人漏掉结果 32 位能跑、64 位一编就报找不到 bpl原因就是只编了 Win32 的运行期包。验证时把Project Options Packages里 “Link with runtime packages” 打开确认运行期包名列表里有 DevExpress 的项。注意最小工程验证通过之前不要往正式项目里合并否则报错来源分不清是控件包问题还是项目自身问题。4. 避坑与排查五条装控件包时真踩过的坑这一章是我这些年装 DevExpress VCL 攒下来的翻车记录每条都按“现象 → 原因 → 解决”写照着对号入座能省不少时间。4.1 编译报“找不到 System.SysUtils”之类的系统单元现象msbuild 编运行期包时报一堆系统单元找不到明明 IDE 里能编。原因命令行 msbuild 没有加载 IDE 的环境变量$(BDS)和框架路径没解析。解决在$(BDS)\bin目录下执行或者先跑rsvars.bat设置环境变量再 msbuild。我一般写个批处理第一行call C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\rsvars.bat后面再跟编译命令。4.2 IDE 启动报“Cannot load package dclcx... 找不到序数”现象装完设计期包重启 IDE 弹框报加载失败序数错误。原因旧版 DevExpress 的 bpl 没清干净新旧设计期包同时被注册符号冲突。解决按 2.3 的清单把Known Packages注册表项和$(BDS)\bin下旧 bpl 清掉只保留新编的重启 IDE 再注册。4.3 控件面板有页签但拖控件报“Class not found”现象IDE 里能看到 DevExpress 页签拖一个控件到窗体上报类找不到。原因设计期包注册了但运行期包没进 Library Path或者 dcu 版本和 IDE 编译器不匹配比如拿了旧版 dcu。解决确认 Library Path 里 dcu 目录在前且 dcu 是用当前 Delphi 11 编的必要时删掉 dcu 目录重新编译别混用不同 IDE 版本的 dcu。4.4 Win64 编译通过但运行时报缺 bpl现象64 位程序编译没问题一运行提示找不到某个 DevExpress bpl。原因只编了 Win32 运行期包64 位程序链接时找不到对应 bpl或者部署时没把 bpl 拷到 exe 同目录。解决用PlatformWin64重编一遍运行期包部署时把Output\bpl下的 64 位 bpl 一起带上或者干脆静态链接关掉 runtime packages。4.5 皮肤/报表模块单独报条件编译错误现象基础模块都编过了编到皮肤或报表模块时报VER360未定义或某条件分支语法错误。原因个别老模块的源码条件编译没跟上新编译器或者包内该模块的源码版本偏旧。解决打开报错单元的源码找到条件编译段确认VER360分支存在缺失的话按同目录其他模块的写法补上对应分支或者确认这个模块是否必须非必需可以先跳过主库能跑起来再说。5. 进阶把控件包做成可复用的部署基线装一次控件包不算本事能把它变成团队里可复用的部署基线才算落地。我的习惯是编译输出目录固定、Library Path 用相对路径脚本化、部署清单单独维护。这样换机器、换人接手照着脚本走一遍就行不用再靠记忆点 IDE 菜单。具体做法是写一个build_devexpress.bat把 3.1 的编译命令按模块顺序串起来输出统一到D:\DevExpress\Output再写一个set_library_path.reg或者用 IDE 的-r参数加载预设的注册表配置把 Library Path 一次性写进去。部署清单用一个文本文件列清楚哪些 bpl 要随 exe 发布、哪些 dcu 要进编译路径、哪些是设计期专用不发布。产物类型用途是否随程序发布运行期 bpl程序运行时链接是动态链接时设计期 bpldcl*IDE 控件面板否dcu编译期引用否dcp包编译中间产物否验证方法也简单找一台没装过 DevExpress 的干净机器按脚本走一遍编译 最小工程验证能过就说明基线可用。我吃过一次亏在自己机器上一切正常换到同事机器上因为 Library Path 里有一条绝对路径指向我的 D 盘直接编不过。从那以后我每次做控件包基线都强制在一台干净环境上走一遍完整流程再交付。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站