Borland C Builder

2008-02-23 05:32:01来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

DX9SDK: 研发库
SAMPLES: 示例程式

示例程式包括:
★ Direct3D 就是 D3D, 处理 3D 图像和图像显示的
★ DirectInput 操控键盘、鼠标、手柄、力反馈系统等输入设备
★ DirectMusic 播放音乐, 能够加入多种播放效果
★ DirectPlay 这个是连网方面的研发库, 研发网络游戏、聊天室、音频及视频的网络传输等
★ DirectShow 视频采集及播放影视、媒体文档、VCD、DVD 等
★ DirectSound 播放、采集(录制)声音文档
★ Misc 杂项程式
★ Demos 一个完整的 3D 游戏演示程式

一共包含 179 个 C Builder 示例程式。
这些程式都是根据原 DirectX 9 SDK 示例程式改编的。

▲ 为什么没有 DirectDraw 的例子?
a) DirectDraw 从 DirectX 7 之后再也不升级了, 在 DirectX 9 里面保持 7 版本
b) BCB 自带 DirectDraw 的例子, 默认在 C:\Program Files\Borland\CBuilder6\Examples\DDraw 文档夹里面
c) DirectDraw 的功能都能够用 Direct3D 来代替, 并且提供更多的功能 (Alpha 和旋转等)

【安装方法】

① 用 WinRAR 3 以上版本解压缩
② Project→Options, 在 Directories/Conditionals 配置里,
→ 点击 Include path 右面的“…”按钮,添加包含 DirectX 9 SDK 的 Include 文档夹的路径,并且移动到最前面
→ 点击 Library path 右面的“…”按钮,添加包含 DirectX 9 SDK 的 Lib 文档夹的路径,并且移动到最前面
③ 一些细节问题请参考本文后面的注意事项。

【注意事项】

① STRICT 定义: 无论用 Visual C 还是 Borland C , 编译 DirectX 程式都需要有这个定义, 不是什么特别的需要。
Project → Options → Directories/Conditionals:
在 Conditional defines 里面添加 STRICT 定义 (点击右面的“…”按钮添加)。

② EInvalidOp: 假如程式在调试时总是提示 EInvalidOp 错误,一般是因为 Borland 和 Micro$oft 浮点数错误处理方式不同引起的。

解决方法:
在 WinMain 的一开始, 或其他程式初始化的位置写下面语句:

D3DFPExOff(); //解决程式产生 EInvalidOp 错误问题, 这个函数在 <d3dbc.h> 里定义。

③ ntdll.DbgBreakPoint: 假如在 debug 程式时频繁出现在 ntdll.DbgBreakPoint 停下来, 需要按 200 多次 F9 (C Builder)
或 F5 (Visual C ) 才可跳过, 但这并不影响 .exe 文档, 也不是错误, 脱离环境能够正常运行。

解决方法:
a) 假如您觉得没关系, 反正能够正常运行, 也不用 debug 程式, 能够不做任何处理。
b) 假如您比较讨厌 ntdll.DbgBreakPoint, 或想调试程式, 请在程式初始化时调用这个函数:
VictorNtDllINT3(); //禁止在 debug 程式时在 ntdll.DbgBreakPoint 停下来, 在 <d3dbc.h> 里定义

④ enum: M$ 的 enum 类型一般都做 int 类型处理, 而 Borland 会根据取值范围按照 char,short,或 long 处理,
这样会因为期望的 sizeof 不同而引起程式出错。

解决方法:
Project→Options→Compiler, 需要选中 Compiling 里面的 Treat enum type as ints.

⑤ MFC: 假如用 BCB 编译 MFC 程式, 也只有在编译 MFC 程式的情况下, 需要选择菜单: Project→Options,

a) 在 Advanced Compiler 配置里,选中 Source 下的 MFC compatibility

b) 在 Directories/Conditionals 配置里,
→ 点击 Include path 右面的“…”按钮,添加一项 $(BCB)\include\mfc
→ 点击 Library path 右面的“…”按钮,添加一项 $(BCB)\lib\Psdk

c) 在主程式 .cpp 文档里加上下面定义:

#ifdef _DEBUG
# pragma link "nafxcwd.lib"
#else
# pragma link "nafxcw.lib"
#endif

按照这样做, MFC 程式一般都会编译和链接通过的。
通过这个配置, BCB 编译 MFC 的程式是完全编译的单独 .exe 文档, 无需带 VC 或其他的 MFC 动态库运行。

⑥ DirectShow 里面有几个例子需要 Windows Media Format SDK 7 研发包的支持, 由于 M$ 的 DirectX 9 SDK 里面没提供,
所以这里也不提供了, 需要的自己解决吧。
M$ 新版 WMFSDK9 不提供 WMFSDK7 的 lib, 并且 WMFSDK7 已不提供下载了, 所以要研发 Windows Media 应该考虑使用 WMFSDK9 了。

⑦ strmbase.lib 补充的 DirectShow 库文档 (2004-08-27)
包含两个文档: strmbase.lib 和 strmbasd.lib, 其中 strmbase.lib 是 release 版本, strmbasd.lib 是 debug 版本的。
由于 debug 和 release 版本的库文档差别比较大, 需要在不同的编译选项采用不同的库文档:

使用方法:
解开压缩包, 替换原来 \DX9BCB\SAMPLES\DirectShow\BaseClasses 文档夹的内容
在主程式 .cpp 文档里加上下面定义 (实际上在工程里的哪个 .cpp 文档都能够, 为了阅读程式和查找方便, 写在主程式 .cpp 文档里)

#ifdef _DEBUG
# pragma link "strmbasd.lib"
#else
# pragma link "strmbase.lib"
#endif

⑧ 每个例子都带有 readme.txt, 在编译之前请先认真阅读。


【修改记录】

① 文档 SAMPLES\Common\Src\dxutil.cpp

函数 DXUtil_GetDXSDKMediaPathCch
修改前: 从注册表里面读出程式的数据文档存放位置, 这不符合绿色软件的原则。
修改后: 从全局变量 _DxAppDataPath 读取数据文档的存放位置, 无需读写注册表了。

函数 DXUtil_SetDXSDKMediaPathCch
新增函数, 可配置程式的数据文档的存放位置, 取代原来的读写注册表。


② 程式 SAMPLES\Direct3D\VCLFog\

原来是 MFC 程式, 修改为 VCL 程式, 程式结构做了调整, 基本上保持原来的代码。

③ 其他程式 (包括MFC的) 基本保持原来的代码, 可能有一些细节问题, 在这里就不一一赘述了。




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用 C Builder 编 Microsoft SQL Server 2000 的扩展存储过程

下一篇: DirectX 9 SDK for Borland C Builder

热门词条
热门标签