开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
DirectX
问题(Question):
在编译一个比较古老的DirectX程式时
我去抓了比较旧版的DirectX SDK来安装 (2010 Feb)
编译可以过,连接也可以过
但是一执行就会出现错误讯息
分两个错误讯息窗出来
第一个是:
The D3D device has a non-zero referecne count,
meaning some objects were not released.
关掉之后会出现第二个
第二个则是:
Failed creating Direct3D device objects.
我第一个动作是上google去查这两个错误讯息
结果并不是查不到,而是找到很多解答但是都没有发挥效果
有的是游戏讨论文章,说要更新显示卡驱动或是换一张比较好的显示卡
但是这点我可以直接排除掉
显卡驱动到最新而且显卡也很新(GTX670)
另外一个方向则是更新DirectX
上网查了一下,想试试看使用新版的SDK
才发现到DX SDK已经被合并到Windows SDK去了
DirectX SDK最新只到2010年就没有了
改安装windows SDK
然后发现旧版的程式有很多include档名都要改
例如"d3dx9.h"要改成"d3d9.h"
但是最令人崩溃的地方在于有的head档并不是更名,而是整个消失了!
直接注解掉也不行,肯定需要更改
这里想请教对于DirectX比较熟悉的前辈
对于比较旧的DirectX程式应该要怎么编译?
我目前想到的方向有两个
1 用新版SDK,但是程式要大改
2 用旧版SDK,但是目前程式跑不起来,会出现最前面的错误讯息
另外,我还做了一个测试
把旧版DirectX SDK里面的dll删除
看看程式执行起来是否会出现找不到dll的错误讯息
结果却是不会发生找不到dll,只出现最前面的device错误
所以我猜系统里面应该哪里也有这些dll档
所以我是用安装的SDK编译与连结,但是用不同版本的dll执行
可是已经搜索了整个C:
并没有发现到其他DX dll档案
windows系统会去寻找windows, system32, PATH这些地方是否有dll档
但是我没有找到它们,完全无法理解程式是怎么被执行起来的
就连是否执行到错误版本的dll也不确定
但是感觉上应该是这样
有在VC专案设定dll的资料夹到DirectX SDK的dll资料夹内
但是感觉没有效果,似乎有个优先权更高的设定不知道在系统哪里