[问题] 编译旧版DirectX程式的Device问题

楼主: iamstudent (stu)   2014-05-26 21:22:22
开发平台(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资料夹内
但是感觉没有效果,似乎有个优先权更高的设定不知道在系统哪里
作者: damody (天亮damody)   2014-05-26 22:13:00
更新你的runtime
楼主: iamstudent (stu)   2014-05-26 22:51:00
这个当然更新过了
楼主: iamstudent (stu)   2014-05-26 22:52:00
我猜是编成旧版 然后新的RunTime不支援
作者: damody (天亮damody)   2014-05-26 23:48:00
分辨率是 16:10 ? 改16:9看看
作者: damody (天亮damody)   2014-05-26 23:50:00
要看连结到的dll 可以用侦错模式打开,然后暂停看模组
作者: damody (天亮damody)   2014-05-26 23:51:00
然后 2010 june 是最新版 不要用feb
作者: damody (天亮damody)   2014-05-26 23:52:00
他虽然表面上说会更新在 windows SDK可是有很多进阶功能只有旧版才有
作者: a27417332 (等号卡比)   2014-05-27 13:51:00
d3d9和d3dx9是不一样的东西吧,一个是核心一个是辅助
作者: a27417332 (等号卡比)   2014-05-27 13:53:00
然后d3d9在哪的sdk应该功能没差,所以下载最新也可以?
楼主: iamstudent (stu)   2014-05-27 14:03:00
最新的不行,比方说dxerr.h就完全消失了注解掉也会留下一堆error,整个程式要大改
作者: azureblaze (AzureBlaze)   2014-05-27 15:02:00
我是最新的你缺的那些我都有
作者: azureblaze (AzureBlaze)   2014-05-27 15:03:00
我觉得你是include路径没设好
楼主: iamstudent (stu)   2014-05-27 15:17:00
OK 那我再测试一次windows SDK
楼主: iamstudent (stu)   2014-05-27 15:45:00
行不通,不知道你的windows SDK版本为何
楼主: iamstudent (stu)   2014-05-27 15:47:00
d3d9在\Microsoft SDKs\Windows\v7.0A\Include
楼主: iamstudent (stu)   2014-05-27 15:48:00
但是d3dx9与dxerr都不存在,我扫过整个资料夹了
作者: azureblaze (AzureBlaze)   2014-05-27 16:01:00
作者: azureblaze (AzureBlaze)   2014-05-27 16:02:00
不然就用dxsdk 2010 june就好了
楼主: iamstudent (stu)   2014-05-27 16:12:00
那篇我有看到,而且回答还是从MS网页上复制过来的
楼主: iamstudent (stu)   2014-05-27 16:13:00
目前就是用dx sdk 2010 Jun去编译,但是无法执行而且也找不出问题所在
作者: damody (天亮damody)   2014-05-27 21:29:00
从feb换成 june了?
楼主: iamstudent (stu)   2014-05-28 00:19:00
Jun要移除vs2010才能安装,非常不方便
楼主: iamstudent (stu)   2014-05-28 00:20:00
不过结果根本没有任何改变
作者: a27417332 (等号卡比)   2014-05-28 18:49:00
刚刚有看到,似乎Windows SDK拔掉了D3DX所以要用D3DX的话,要灌DXSDK然后不是移除VS2010,只是移除一个相关套件然后建议搞清楚D3D和D3DX的差别?后者仅用来辅助而已

Links booklink

Contact Us: admin [ a t ] ucptt.com