简介:这份资源是面向 Delphi 2010 开发者的 DSPack 2.34 组件包,已在实际环境中测试通过,主要解决该版本 IDE 下网络通信、多线程、数据库访问与串口通信等组件的兼容性问题,适合需要快速搭建高性能 Windows 应用的中级开发者使用。压缩包为 rar 格式,共 319 个文件,约 1.75MB,其中 95 个 pas 单元与 40 个 dpr 工程文件构成核心源码与示例,39 个 dfm 窗体、11 个 res 资源及 9 个 dcu 编译单元便于直接查看与复用,另有 dpk、dproj、groupproj 等包与工程配置文件和若干批处理脚本辅助安装注册。资源已有 329 人学习下载,说明在 Delphi 社区中具备一定参考价值。读者可获得经过验证的组件源码、示例工程与安装配置结构,用于对照学习组件用法、排查版本兼容问题,并作为网络服务、实时监控等项目的开发基础。
1. 装 Delphi 2010 的 DSPack 2.34:先别急着双击,版本对不上全白搭
上周帮一个做音视频采集的同行收拾一台老开发机,Delphi 2010 装好、DSPack 2.34 解压完,编译一跑,满屏Unit not found和DirectShow9相关的报错。他以为包坏了,重下了三遍,其实问题出在版本和路径上——DSPack 2.34 是能配 Delphi 2010 的,但前提是你得把包按正确的顺序装进 IDE,而不是把源码目录往工程里一拖了事。这套组合在工控、监控、老项目维护里太常见了,装不好就是编译不过、控件面板里找不到组件、运行时ActiveX初始化失败。这篇记录写给正在给 Delphi 2010 配 DSPack 2.34 的人,从环境清点、包安装、路径配置到编译验证,一步步走完,中间翻车的地方我都标出来。
2. 环境清点与版本核对:Delphi 2010 配 DSPack 2.34 的前置条件
2.1 先确认 IDE 位数和已装更新
Delphi 2010 是 32 位 IDE,编译目标是 Win32,这一点决定了 DSPack 2.34 里哪些包能装、哪些装了也白装。打开 IDE,Help → About看清楚版本号,常见的是 14.0.3513.24210 这类带更新的版本。如果你手上是早期未打补丁的 2010,部分DirectShow接口声明会跟 DSPack 里的DirectShow9.pas对不上,表现是编译时提示某接口方法签名不匹配。我一般会先把 IDE 更新到该版本最后一个官方补丁再动 DSPack,省得后面排查时把 IDE 的问题算到包头上。
DSPack 2.34 的源码目录里通常有Source、Packages、Demos三块。Packages下按 Delphi 版本分目录,2010 对应的是Delphi2010或D2010命名的文件夹,具体名字以你拿到的包为准。装之前先把这个目录结构看清楚,后面加 Library Path 全靠它。
2.2 核对 DSPack 2.34 的包文件清单
DSPack 的包不是单个.dpk,而是一组运行期包加设计期包。典型清单如下,不同打包方式可能略有出入,以实际目录为准:
| 文件 | 类型 | 作用 |
|---|---|---|
DSPack.dpk | 运行期包 | 核心 DirectShow 封装,必须装 |
DSPackD.dpk | 设计期包 | 把控件注册到 IDE 面板,依赖 DSPack |
DirectShow9.pas | 单元 | 接口声明,路径必须能被找到 |
DSPackReg.pas | 单元 | 控件注册逻辑,设计期包引用 |
装包顺序是硬性的:先编译安装运行期包DSPack.dpk,再装设计期包DSPackD.dpk。反过来装,设计期包会因为找不到运行期包里的单元直接报错。这个顺序我见过太多人搞反,然后以为是包损坏。
2.3 系统层面的依赖确认
DSPack 底层走的是 DirectShow,Windows 系统组件本身就在,不需要额外装 SDK。但有两个点要确认:一是系统里quartz.dll正常注册,二是如果你在 64 位 Windows 上跑 32 位 Delphi 2010,编译出来的程序也是 32 位,DirectShow 调用走的是 32 位组件层,这个不用改,别去折腾 64 位编译目标,DSPack 2.34 这套源码本来就是按 Win32 组织的。
提示:装之前把工程里已有的同名单元备份一下。有些老项目自己改过
DirectShow9.pas,直接覆盖会丢改动。
3. 安装 DSPack 2.34 运行期包:从打开 dpk 到编译通过
3.1 用 IDE 打开并编译 DSPack.dpk
不要双击.dpk让系统关联打开,走 IDE 菜单更稳:File → Open,文件类型选Delphi Package (*.dpk),定位到Packages\Delphi2010\DSPack.dpk。打开后 Project Manager 里能看到包内单元列表。先别急着点 Install,先Project → Build DSPack编译一遍。
// DSPack.dpk 里常见的 requires 段,确认引用了正确的运行期包 requires rtl, vcl, vclx;这段requires声明了包依赖的 Delphi 运行期库。如果编译时报Required package 'rtl' not found,说明 IDE 的库路径或已安装包列表有问题,不是 DSPack 本身的事。常见做法是检查Component → Install Packages里rtl、vcl是否在列,缺了就补上。编译通过后再点Install,IDE 会把DSPack.bpl注册进系统并写入注册表。
3.2 编译报错时的定位方法
运行期包编译最常见的两类错误:一类是File not found: 'DirectShow9.pas',这是 Library Path 没配,下一章专门讲;另一类是接口方法签名不匹配,报错行往往落在DirectShow9.pas里某个QueryInterface或SetFilterState附近。后者多半是 IDE 版本补丁不到位,或者你拿到的 DSPack 2.34 被人改过。我的处理习惯是先把Source目录整体加进 Library Path 再编译一次,排除路径因素;如果还报签名错,就对照 IDE 自带的DirectShow9相关声明看差异,别硬改包源码。
3.3 安装成功的判断标准
点完Install后,IDE 会弹一个提示说包已安装。判断是否真成功,看两处:Component → Install Packages列表里出现DSPack且勾选状态正常;Tool Palette里能搜到TFilterGraph、TVideoWindow这类控件。两处都对,运行期包这步就算过了。如果列表里有但面板里没有,那是设计期包还没装,正常,继续下一步。
4. 设计期包与 Library Path:让 IDE 真正认得 DSPack 2.34
4.1 安装 DSPackD.dpk 并注册控件
同样走File → Open打开Packages\Delphi2010\DSPackD.dpk,先 Build 再 Install。设计期包依赖运行期包,所以上一步必须先完成。Build 阶段如果报Unit 'DSPack' not found,说明运行期包虽然装了,但设计期包编译时找不到它的单元路径,这时候把Source目录加进 Library Path 再 Build。
// DSPackD.dpk 的 requires 段应包含运行期包 requires rtl, vcl, DSPack;这里的DSPack就是上一步装的运行期包。Install 成功后,Tool Palette的DSPack页签下会出现完整控件组。到这一步,IDE 层面的安装才算闭环。
4.2 Library Path 的三个必加目录
Library Path 配错是 DSPack 装完后编译工程失败的头号原因。走Tools → Options → Environment Options → Delphi Options → Library - Win32,在Library path里追加三个目录,用分号分隔:
<DSPack根目录>\Source <DSPack根目录>\Source\DirectShow9 <DSPack根目录>\Packages\Delphi2010第一个是核心单元所在,第二个放接口声明相关文件(部分打包版本会单独分目录),第三个是包文件目录,方便工程引用。路径里不要带中文和空格,老 IDE 对这两样处理得不好,我见过路径里有空格导致dcu输出异常的案例。加完点 OK,重启 IDE 让路径生效。
4.3 工程级配置与搜索路径优先级
全局 Library Path 加完后,具体工程里还要确认Project → Options → Delphi Compiler → Search path没有把 DSPack 目录排除在外。工程级 Search path 优先级高于全局,如果工程里写了旧的 DSPack 路径,会覆盖全局配置。常见做法是工程里不写死 DSPack 路径,统一走全局,换机器时只改一处。
注意:Delphi 2010 的
dcu输出目录如果和 DSPack 源码目录混在一起,重新编译时可能读到旧dcu。我一般把工程的dcu输出单独指到一个$(Platform)\$(Config)目录,避免污染。
5. 避坑排查:DSPack 2.34 在 Delphi 2010 上的五类翻车
5.1 现象:编译报 Unit not found,重装包也没用
原因基本是 Library Path 没加或加了没重启 IDE。Delphi 2010 的路径配置在 IDE 启动时读入,改完不重启,当前会话里新路径不生效。解决:确认三个目录都在Library - Win32里,关掉 IDE 重开,再 Build。如果还不行,检查路径拼写,尤其是Source和Sources这种一字之差。
5.2 现象:控件面板里没有 DSPack 页签
原因是只装了运行期包,设计期包没装或装失败。解决:打开DSPackD.dpk单独 Build,看报错落在哪个单元。常见是设计期包引用的DSPackReg.pas路径不在 Search path 里,补上Source目录再 Build。装完仍不显示,去Component → Install Packages确认DSPackD勾选状态,取消再勾一次强制重注册。
5.3 现象:运行时提示 ActiveX 控件未注册或初始化失败
这是 DirectShow 组件在窗体上创建时CoCreateInstance失败,多半是程序位数和系统组件层不匹配,或者quartz.dll注册异常。解决:确认编译目标是 Win32;在命令行跑regsvr32 quartz.dll重新注册(需要管理员权限);检查程序是否在受限权限下运行,DirectShow 某些滤镜在低权限下创建会失败。
5.4 现象:编译通过但链接报重复单元
工程里同时引了 DSPack 的DirectShow9.pas和系统或第三方库里的同名单元,链接器不知道用哪个。解决:在工程uses里调整顺序,把 DSPack 的单元放前面;或者干脆从工程里移除重复引用,统一走 DSPack 提供的版本。我一般会在工程文档里记一笔,避免后来人又加回去。
5.5 现象:换机器后整套配置失效
DSPack 的包注册信息写在注册表里,换机器只拷源码不重装包,IDE 认不到。解决:新机器上按第 3、4 章重走一遍安装流程,别指望拷bpl过去就能用。Library Path 也要在新机器上重配,路径根目录变了就得改。我的习惯是把 DSPack 根目录固定成一个短路径,比如D:\Lib\DSPack234,换机器时只改盘符,减少出错面。
6. 装完怎么验证:用一个最小采集 Demo 跑通 DSPack 2.34
装完包、配完路径,别急着往正式工程里塞,先拿一个最小 Demo 验证整条链路。DSPack 包里自带Demos目录,挑一个最简单的视频预览例子,比如带TFilterGraph加TVideoWindow的窗体。新建一个空白 VCL 工程,从面板拖一个TFilterGraph和一个TVideoWindow上去,写下面这段初始化代码:
procedure TForm1.FormCreate(Sender: TObject); begin // 绑定视频窗口到 FilterGraph FilterGraph1.VideoWindow := VideoWindow1; // 构建一个简单的预览图:摄像头或测试源 FilterGraph1.RenderFile('C:\test\sample.avi'); FilterGraph1.Play; end;VideoWindow属性把TVideoWindow挂到 FilterGraph 的渲染链上,RenderFile让 DirectShow 自动构建滤镜图,Play启动播放。这段代码能跑,说明运行期包、接口声明、DirectShow 组件层全部打通。跑不通就按报错回查:RenderFile报文件找不到是路径问题,Play报ActiveX错误回第 5.3 条,控件拖不上面板回第 5.2 条。
再补一个验证点:打开Component → Install Packages,确认DSPack和DSPackD两个包都在且勾选,Tool Palette里控件能正常拖放不报错。这两项加 Demo 播放,三样都过,这套 DSPack 2.34 在 Delphi 2010 上就算真正装成了。
从那以后我每次配这套环境,都强制先跑一遍最小 Demo 再动正式工程,宁可多花十分钟验证,也不在业务代码里排查环境问题。希望帮到你。
本文还有配套的精品资源,点击获取