开发平台(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
作者:
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可是有很多进阶功能只有旧版才有
d3d9和d3dx9是不一样的东西吧,一个是核心一个是辅助
然后d3d9在哪的sdk应该功能没差,所以下载最新也可以?
最新的不行,比方说dxerr.h就完全消失了注解掉也会留下一堆error,整个程式要大改
d3d9在\Microsoft SDKs\Windows\v7.0A\Include
但是d3dx9与dxerr都不存在,我扫过整个资料夹了
目前就是用dx sdk 2010 Jun去编译,但是无法执行而且也找不出问题所在
作者:
damody (天亮damody)
2014-05-27 21:29:00从feb换成 june了?
刚刚有看到,似乎Windows SDK拔掉了D3DX所以要用D3DX的话,要灌DXSDK然后不是移除VS2010,只是移除一个相关套件然后建议搞清楚D3D和D3DX的差别?后者仅用来辅助而已