首页 > C/C++开发工具专区 > BCB技术 > DirectX 9 SDK for Borland C++ Builder
2005
12-08

DirectX 9 SDK for Borland C++ Builder

【软件简介】

  DirectX 9 SDK for Borland C++ Builder, 发布日期: 2004-07-20
  Microsoft 公司的 DirectX 9 SDK 经过格式转换生成的 Borland C++ Builder 库文件。

  这个开发库只支持 Borland C++ Builder, 如果要其他版本的,请到 Microsoft 主页上找。
  如果有什么问题请到网友留言上发帖。

  补充内容: strmbase.lib — DirectShow 的库文件, 请参阅本页后面的“注意事项”, 发布日期: 2004-08-27

  文档下载链接已修复: 由于原先文档放在别人的空间里, 引起文档无法下载, 现在已经修复, 放在我自己的空间里面了。(2004-09-13)


【有关版权】

  DirectX 9 SDK: Copyright (C) Microsoft Corp.
  DirectX 9 SDK for Borland C++ Builder: Copyright (C) Victor Chen, http://www.cppfans.com/
  原来的 DirectX 9 SDK 是免费的开发库,DirectX 9 SDK for Borland C++ Builder 仍然是免费的开发库。


【内容介绍】

  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的) 基本保持原来的代码, 可能有一些细节问题, 在这里就不一一赘述了。




下载 DirectX 9 SDK for C++ Builder40,571,256 字节


下载 DirectX 9 SDK 文档 (英文 chm 帮助)30,546,009 字节


下载 strmbase.lib for C++ Builder (含源程序)856,780 字节


留下一个回复