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

DevExpress VCL分卷解压、编译安装与IDE集成全流程指南

DevExpress VCL分卷解压、编译安装与IDE集成全流程指南 ★ FEATURED ARTICLE
简介这份资源是 DevExpress VCL.All 的下半部分提供 Delphi 环境下可用的数据网格、图表、报表、导航与窗口组件。压缩包体积约 18.46MB文件总数约 2000 个其中 dpk、pas、cpp、bpk 等源码与工程文件占多数配合 res、dfm 等资源描述文件可支撑控件编译、界面设计与二次开发txt、doc、pdf 则能帮助快速了解安装和配置要点。已有 162 人浏览或学习属于值得收藏的 VCL 参考资料。包内 cxGrid 系列控件可按需加载对应版本的 bpk 包适合中高级 Delphi 开发者在构建数据密集型桌面应用时参考借助配套的源代码与示例可熟悉分组、排序、过滤、图表绘制、报表打印等常用交互模式同时理解控件包的目录结构和生成机制。资源中既保留了大量 pas 源码与 res 资源又提供可编译工程包便于对照调试也适合需要在旧项目间统一界面风格的团队沿用。1. DevExpressVCL.All.下部分到底是什么先弄懂分卷再谈安装很多老Delphi开发者在整理离线控件包时会遇到一个非常尴尬的场景下载目录里只有一个DevExpressVCL.All.下部分文件解压时报错另一半却怎么也找不到。这通常不是资源坏了而是DevExpress VCL全家桶体积太大被拆成了多个分卷常见拆分方式是上部分放源码主体和运行库下部分放报表模块、设计时包和文档也有按RAR/ZIP多卷命名的形式。这里把从分卷合并、编译安装、IDE集成到离线部署的全过程走一遍重点不是宣传这套控件库有多强而是让下载回来的下部分真正变成能用的工具。这篇文章适合手里只有半套安装包、或者被分卷命名搞得一头雾水的开发者和项目实施工程师。2. 拆解DevExpressVCL.All.下部分分卷合并与解压的正确姿势2.1 先识别下部分是哪一种分卷结构拿到文件先别急着双击。不同渠道的分卷命名习惯完全不一样但结构上通常逃不出四种。先看扩展名再决定用什么工具处理这一步判断错后面全白搭。常见分卷风格如下表。分卷风格扩展名特征解压入口卷经典多卷RARxxx.part1.rar、xxx.part2.rar入口是part1.rarZIP多卷xxx.zip加xxx.z01、xxx.z02入口是xxx.zip7z多卷xxx.7z.001、xxx.7z.002入口是xxx.7z.001自解压分卷xxx.exe运行时依次提示后续卷直接运行.exe如果文件名叫DevExpressVCL.All.下部分没有明确的.part1或.001后缀第一步是用 7-Zip 列出它的内部结构判断它到底是主卷还是辅助卷。7z l DevExpressVCL.All.下部分.zipl是 list 的简写只列出压缩包内容不实际解压。如果输出了一长串目录和文件名说明这个文件是主卷直接解压即可如果提示Cant open as archive那它就只是辅助卷或者原始二进制切片需要找另一半。还有一种常见情况是扩展名被改过比如内容本来是RAR文件名却写着.zip7-Zip 能自动识别真实压缩算法所以l命令列出来的结果才是最终依据。从原理上讲分卷压缩时主卷头部保存了整个压缩包的文件表和校验信息辅助卷只保存数据流。没有主卷辅助卷就是无头尸体任何解压工具都无从下手。这也是下部分单独存在时完全无法使用的根本原因。2.2 用7-Zip命令行合并解压整个过程可回放最常见且稳妥的操作是把上、下部分放到同一个目录命名前缀保持一致用上卷作为输入直接解压。7-Zip 会在执行时自动寻找同目录下的续卷不需要手动拼接。mkdir D:\VCL_DevExpress\Source move /Y DevExpressVCL.All.上部分.zip D:\VCL_DevExpress\ move /Y DevExpressVCL.All.下部分.zip D:\VCL_DevExpress\ cd /d D:\VCL_DevExpress 7z x -y DevExpressVCL.All.上部分.zip -oD:\VCL_DevExpress\Source这段命令的逻辑是先建输出目录把上下两个分卷搬到同一目录然后以上部分为主卷解压。-y表示遇到覆盖询问时全部选择是-o指定输出根目录注意-o后面直接跟路径不要加空格。7-Zip 在解压过程中读取主卷的文件表按卷号顺序切换到后续卷所以文件放齐之后它会自己把数据流拼完整。如果确认手上是原始二进制切片比如下载站把一个大包切成固定大小的.aa、.ab文件才有必要手动拼接。这种情况下 7-Zip 无法直接识别需要按顺序用copy /b合并成一个完整文件copy /b DevExpressVCL.All.上部分.bin DevExpressVCL.All.下部分.bin DevExpressVCL.All.merged.7z 7z t -y DevExpressVCL.All.merged.7zcopy /b是二进制合并顺序必须保持上部分在前、下部分在后颠倒后整个文件哈希对不上解压必然失败。合并完成后先用7z t做完整性测试t是 test 的简写只校验每个文件块的 CRC不落盘。这一步相当于后悔药确认没问题再解压避免合并出来的残次品污染目录。7-Zip 部分常用参数也值得记一下-t7z用于强制指定压缩格式-p密码给带密码的包解密-aoa与-y类似但更强制地覆盖所有文件。平时我一般只用-y -o两个其他参数按需补充。2.3 解压后的目录结构与完整性校验清单解压完成后先别急着打开 IDE。对照一下目录结构是否完整DevExpress VCL 系列的整理包目录命名大体比较固定差异只在具体文件夹名上。我按常见结构列了一张表。目录名典型内容后续流程中的作用Source各组件单元的.pas源码编译时生成.dcuLibrary预编译的.bpl、.dcp、.dcu直接注册与引用Demos各模块示例工程验证组件、学习 APIDocumentation帮助文件与 PDF 文档查阅属性与事件Source和Library两个目录是最关键的。如果只有Source没有Library说明这套包需要自己编译如果Library里有预编译产物还要确认这些产物对应的 IDE 版本。预编译库一般只匹配一个或少数几个 IDE 大版本你的开发环境不在支持列表里的话别依赖它直接用源码重新编一遍。解压过程中的报错也要会看。提示Unexpected end of archive说明卷不齐还有后续卷没放进来提示CRC Failed说明某个分卷在下载过程中字节错位大概率是网络传输问题而不是压缩包本身有问题。经验做法是先看日志尾部提示的是哪个具体文件对应到卷号重下那一卷即可不要整套包重新下一遍那是最费时间的做法。提示解压路径尽量保持纯英文避免中文目录加空格。Delphi 的老版本 IDE 对路径中的非 ASCII 字符处理不够稳定编译时会出现莫名其妙的资源找不到问题。3. 编译安装DevExpress VCL版本匹配与编译顺序才是关键3.1 先用安装器确认IDE版本别只看压缩包名字很多人在这一步吃过亏。DevExpressVCL.All.下部分里往往带一串版本号但那是控件库的版本不是 IDE 版本。常见误区是把支持新版 IDE 的控件包硬装进老版本 Delphi 工程面板能注册上一编译就到处报File not found甚至直接卡死。DevExpress VCL 每个大版本都有明确的 IDE 支持区间。安装包运行后的第一个界面通常会有 IDE 版本下拉框如果当前 IDE 版本没有出现在列表里说明这套控件库和开发环境不匹配应该换一套对应 IDE 时代的 DevExpress 版本而不是强行继续装。判断已安装的 DevExpress 版本也有办法打开 IDE 的 About 页面或者到注册表里查已安装包列表看版本描述这个方法不改动任何配置最安全。如果开发机上同时装了多个版本的 IDE比如一个老工程用老版本一个新工程用新版本建议按 IDE 版本分别建立 DevExpress 安装目录不要共用同一个Library输出目录。原因是不同 IDE 版本的.dcp格式不通用共用目录时后装的包会把先装的.dcp覆盖掉老工程编译时拿到的是新格式的.dcp直接报错。这个坑很隐蔽排查起来费时间最好的办法就是从一开始物理隔离。3.2 先运行库后设计时包编译顺序决定成败拿到源码包后编译顺序非常讲究。DevExpress VCL 的包分为两类不带dcl前缀的是运行时包输出.bpl和.dcp给最终 exe 使用带dcl前缀的是设计时包只给 IDE 在开发期加载用于 Tool Palette 显示控件。设计时包依赖运行时包所以必须先编译运行时包再编译设计时包。常见做法是打开解压目录里的.dpk文件在 IDE 里逐个编译但包数量多手动点容易漏。我一般会用命令行编译器dcc32.exe写批处理只要把依赖顺序排对整个过程可重复执行。dcc32.exe是 IDE 自带的命令行编译器路径通过%BDS%环境变量定位这样换机器也不用改路径。echo off set DCC%BDS%\bin\dcc32.exe set DXSRCD:\VCL_DevExpress\Source set DXOUTD:\VCL_DevExpress\Library rem 第一步底层公共库 %DCC% %DXSRC%\dxLib\dxCore.dpk -LE%DXOUT% -LN%DXOUT% -U%DXSRC% if errorlevel 1 goto :fail rem 第二步依赖公共库的网格运行库 %DCC% %DXSRC%\ExpressQuantumGrid\cxGrid.dpk -LE%DXOUT% -LN%DXOUT% -U%DXSRC%;%DXSRC%\dxLib if errorlevel 1 goto :fail goto :end :fail echo 编译失败请查看上方错误行 pause :end这段批处理演示了编译顺序先编dxCore公共库再编依赖它的控件库。-LE指定.bpl输出目录-LN指定.dcp输出目录-U指定单元搜索路径多个路径用分号隔开。if errorlevel 1 goto :fail用来捕捉编译失败只要dcc32返回错误码就停下来不会继续往下编避免产生一堆半成品包。同一个.dpk文件用不同 IDE 版本编译两次会把同一个名字的.bpl覆盖掉。所以输出目录一定要按 IDE 版本分比如Library\D10、Library\D12编译命令里同步改掉-LE和-LN的路径。另外如果你在源码根目录看到自带的构建脚本比如make.cmd或build.bat先打开读前 20 行再跑。很多脚本默认写的是打包机器上的绝对路径直接双击运行一定报错把路径改成你自己的目录才是正道。3.3 编译日志里抓这几行5分钟定位问题编译时控制台会吐出大量信息肉眼扫非常低效。正确做法是把输出重定向到文件再用findstr过滤出错误行。%DCC% %DXSRC%\ExpressQuantumGrid\cxGrid.dpk -LE%DXOUT% -LN%DXOUT% -U%DXSRC% build.log 21 findstr /i error fatal build.log build.log 21把标准输出和错误输出都写进同一个文件findstr /i不区分大小写地匹配包含error或fatal的行。重点关注三类信息Fatal Error是编译停止的真正原因带行号的Error会指出具体是哪个源文件哪一行出的问题Warning一般不阻断编译但如果同一个单元反复出现 warning通常意味着有重复源码路径或版本混用。常见的报错也就那几类File not found: Xxx.dcu表示-U参数没有覆盖到对应源码目录Cant open resolver说明搜索路径里有多个同名包在打架要检查是不是老版本残留目录混进了路径Cant find resource多半是.res资源脚本路径不对编译时把源码根目录也加进-U一般能解决。看清错误类型再动手比盲目重装快得多。4. IDE集成与库路径配置把dx控件装进Tool Palette并能编译通过4.1 注册设计时包Component Install Packages 的正确操作编译完成后IDE 里还看不到 dx 控件因为设计时包还没注册。设计时包是一个特殊的.bpl它负责把控件类注册到 IDE 的组件系统里Tool Palette 才能显示出来。操作路径非常固定打开 IDE 主菜单找到 Component 菜单下的 Install Packages点 Add 按钮选择编译输出目录下以dcl开头的.bpl文件。操作步骤可以总结为三步。第一步打开 Install Packages 对话框第二步点 Add定位到.bpl文件第三步确认列表中出现 Express 相关条目后关闭对话框。此时 Tool Palette 里会新增以dx开头的组件页按安装时选择的模块分类。如果点 Add 之后弹窗提示Cannot load package不要继续往下注册先把缺失的依赖解决掉。平台匹配是这里最容易忽略的细节。IDE 进程分为 Win32 和 Win64 模式设计时包也必须对应平台。注册了错误平台的.bpl条目上会出现黄色感叹号鼠标放上去能看到错误描述。老版本 IDE 的.bpl尾部通常带版本后缀字母不同 IDE 大版本的后缀不同选择与当前 IDE 版本一致的那组文件即可。一个小技巧注册完 Close 之前看看到底成功加载了几个包数量异常时立刻排查别等重启 IDE 再看。4.2 Library Path用环境变量不写死绝对路径设计时包注册成功只是第一步。编译工程时IDE 还需要在 Library Path 里找到对应的.dcu和.dcp。这个配置项在 Tools Options 的 Delphi Options 页面里是一长串用分号隔开的目录列表。很多人直接手填绝对路径换一次机器就崩一次团队协作时每个人的路径还不一样纯属给自己挖坑。常见做法是定义一个环境变量指向 DevExpress 根目录然后 Library Path 里引用这个变量。先用 setx 设置用户级环境变量setx DXROOT D:\VCL_DevExpresssetx写入的是用户环境变量设置后要重启 IDE 才会生效。然后打开 Library Path 编辑框填入$(DXROOT)\Library;$(DXROOT)\Source;$(DXROOT)\Source\dxLib这里$(DXROOT)是环境变量的引用语法IDE 启动时会把它展开成实际路径。这样配置后整个工程文件里不会出现任何机器相关的绝对路径项目拷给同事也能直接编译。Library Path 的搜索顺序就是编译时的查找顺序所以当前版本对应的目录一定要放在最前面避免 IDE 先找旧版本的.dcp导致版本错乱。配置完成后做一个十分钟的自检新建一个 Application往窗体上放一个 dx 按钮编译运行。如果设计时能看到控件、运行时报找不到.bpl那是系统 PATH 或运行时包的问题与 Library Path 无关如果能编译但样式和设计时不一致才需要检查皮肤相关配置下一节会讲。4.3 运行时皮肤不生效给uses里补上皮肤注册单元安装完 DevExpress VCL最常见的一个抱怨是控件能用但运行后的界面还是 Windows 原生样式没有宣传图里的现代皮肤。原因其实很简单设计时看到皮肤是因为 IDE 进程加载了皮肤包而你的 exe 运行时皮肤单元根本没有被链接进来所以风格全丢。常见做法是在项目主文件的uses里加入皮肤注册单元。以 Office2019 Black 皮肤为例在.dpr文件的uses段补上对应单元program MyApp; uses VCL.Forms, Unit1 in Unit1.pas {Form1}, dxSkinsDefaultPainters, dxSkinOffice2019Black;皮肤注册单元的作用是让皮肤管理器在启动时认识这个皮肤。如果窗体上放了一个TdxSkinController控件还应该在OnCreate事件里指定皮肤名procedure TMainForm.FormCreate(Sender: TObject); begin dxSkinController1.SkinName : Office2019 Black; end;TdxSkinController控件的SkinName属性在运行时赋值前提是uses里的皮肤单元已经链接进来。如果uses没有引用对应皮肤单元即使SkinName写对了发布到没有安装 DevExpress 的机器上皮肤依然无效甚至报缺包。想要完整的皮肤单元列表最稳的办法是打开 Demos 目录里的示例工程看它的uses写的是什么直接抄过来再按需裁剪。皮肤会明显增加 exe 体积只保留实际用到的两三个就好。5. 避坑排查分卷损坏、编译失败、控件消失的5条典型问题5.1 解压与下载阶段先分清卷不齐和卷坏了现象一用下部分文件解压走到一半弹出 Unexpected end of archive然后停止。原因是解压入口选错了辅助卷内部没有完整文件表无法独立完成解压。解决方法是把上、下部分放到同一目录以上卷作为输入重新执行解压命令。如果仍然报错执行7z t逐卷测试命令会明确提示缺失的是哪一卷补上即可。现象二解压到 80% 左右报 CRC Failed日志指向一个具体文件。这种情况绝大多数是下载过程中字节错位多线程下载工具尤其容易出现不是硬盘坏道也不是压缩包本身有问题。解决方法是定位到出错的卷号单独重下那一卷然后再次执行7z t确认校验通过。血泪经验是不要整套包重新下载先看日志尾部的文件名对应卷号之后只重下一份能省掉大量等待时间。如果发现下载站提供的是带恢复记录的分卷解压时遇到个别扇区损坏7-Zip 有时能自动修复但大多数整理包没有恢复记录所以校验这步不能省。5.2 编译与注册阶段三条最常见翻车现场现象三Install Packages 里点 Add 之后弹窗 Cannot load package注册列表中该条目显示黄色感叹号。原因是设计时包依赖的运行时.bpl没有编译或者运行时包不在系统搜索路径里。解决方法是先把不带dcl前缀的运行时包全部编译完成再将Library输出目录临时加入系统 PATH重启 IDE 后重新注册。还要确认 IDE 的位数和.bpl的位数一致64 位 IDE 注册不了 32 位设计时包。现象四工程编译报 File not found: Xxx.dcu但明明之前已经编译过对应的包。原因是 Library Path 没有包含.dcu输出目录或者 IDE 没重启导致目录缓存没刷新。解决方法是在 Library Path 最前面加上编译输出目录点确认后重启 IDE顺便把 IDE 用户目录下的缓存文件清一遍再重新打开工程。这个问题的隐蔽之处在于有时路径早就加进去了但 IDE 缓存里还是旧路径必须彻底重启才能生效。现象五Tool Palette 里找不到 dx 分类搜索也搜不到任何 dx 控件。这个情况多半不是没装上而是 Palette 处于过滤状态或者注册了错误平台的.bpl。解决方法是右键 Tool Palette打开 Properties检查当前过滤条件是不是把 dx 分类隐藏了同时对照.bpl文件名后缀确认平台再重启 IDE。选择全部显示后如果还是看不到再考虑重新注册一遍。遇到问题不要东改一下西改一下按顺序排查确认分卷完整确认 IDE 版本匹配确认运行库先编译确认 Library Path 配置最后确认设计时包注册。这个顺序可以过滤掉九成以上的低级错误剩下的才是真正需要翻文档的问题。6. 离线部署技巧把DevExpress VCL运行库精简打成部署版本开发机上一切正常不代表目标机器能跑起来。VCL 程序在运行时需要动态链接对应版本的.bpl直接拷贝整个 Library 目录给客户是非常糟糕的做法里面夹杂着大量用不到的模块和文档还容易把平台混在一起。我一般用一个小脚本只把运行库输出目录里的.bpl拷到 exe 同级目录程序优先从 exe 所在目录加载动态库不需要在客户机上注册任何东西。echo off set DX_LIBD:\VCL_DevExpress\Library set APP_BINC:\Deploy\MyApp\bin if not exist %APP_BIN% mkdir %APP_BIN% copy /y %DX_LIB%\*.bpl %APP_BIN% if errorlevel 1 goto :fail echo 运行库拷贝完成 pause exit /b 0 :fail echo 拷贝失败检查路径 pause这个脚本的逻辑是先定义两个目录变量然后自动创建发布目录把所有.bpl复制过去copy /y表示覆盖同名文件。if errorlevel 1判断复制是否失败失败就停在提示处成功就正常结束。实际项目中我会把脚本再细化一点按模块清单复制而不是全量*.bpl用不到图表模块的客户机就不带图表相关的包减少出错的接触面积。部署时最常见的问题是平台混放。把 Win32 和 Win64 的.bpl放进同一个目录后客户机启动时常常直接报0xc000007b这是因为 exe 是 32 位的却优先加载到了 64 位的动态库位数不匹配导致入口点失效。解决方法是每个发布目录只放当前平台对应的.bpl目录名里写清楚版本号和平台发布时按目录整体拷贝。我早期就翻过一次车把两个平台的包混在一起发给现场客户机器一启动就黑屏返工一次后才养成了这个习惯每个发布目录只放当前平台的文件并在发布记录里写清 DevExpress 版本和 IDE 版本。这个习惯救了很多次急希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站