[問題] 編譯舊版DirectX程式的Device問題

看板C_and_CPP作者 (stu)時間10年前 (2014/05/26 21:22), 編輯推噓2(2028)
留言30則, 4人參與, 最新討論串1/2 (看更多)
開發平台(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資料夾內 但是感覺沒有效果,似乎有個優先權更高的設定不知道在系統哪裡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.210.62 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401110546.A.200.html

05/26 22:13, , 1F
更新你的runtime
05/26 22:13, 1F

05/26 22:51, , 2F
這個當然更新過了
05/26 22:51, 2F

05/26 22:52, , 3F
我猜是編成舊版 然後新的RunTime不支援
05/26 22:52, 3F

05/26 23:48, , 4F
解析度是 16:10 ? 改16:9看看
05/26 23:48, 4F

05/26 23:50, , 5F
要看連結到的dll 可以用偵錯模式打開,然後暫停看模組
05/26 23:50, 5F

05/26 23:51, , 6F
然後 2010 june 是最新版 不要用feb
05/26 23:51, 6F

05/26 23:52, , 7F
他雖然表面上說會更新在 windows SDK可是有很多進階功能
05/26 23:52, 7F

05/26 23:52, , 8F
只有舊版才有
05/26 23:52, 8F

05/27 13:51, , 9F
d3d9和d3dx9是不一樣的東西吧,一個是核心一個是輔助
05/27 13:51, 9F

05/27 13:53, , 10F
然後d3d9在哪的sdk應該功能沒差,所以下載最新也可以?
05/27 13:53, 10F

05/27 14:03, , 11F
最新的不行,比方說dxerr.h就完全消失了
05/27 14:03, 11F

05/27 14:03, , 12F
註解掉也會留下一堆error,整個程式要大改
05/27 14:03, 12F

05/27 15:02, , 13F
我是最新的你缺的那些我都有
05/27 15:02, 13F

05/27 15:03, , 14F
我覺得你是include路徑沒設好
05/27 15:03, 14F

05/27 15:17, , 15F
OK 那我再測試一次windows SDK
05/27 15:17, 15F

05/27 15:45, , 16F
行不通,不知道你的windows SDK版本為何
05/27 15:45, 16F

05/27 15:47, , 17F
d3d9在\Microsoft SDKs\Windows\v7.0A\Include
05/27 15:47, 17F

05/27 15:48, , 18F
但是d3dx9與dxerr都不存在,我掃過整個資料夾了
05/27 15:48, 18F


05/27 16:02, , 20F
不然就用dxsdk 2010 june就好了
05/27 16:02, 20F

05/27 16:12, , 21F
那篇我有看到,而且回答還是從MS網頁上複製過來的
05/27 16:12, 21F

05/27 16:13, , 22F
目前就是用dx sdk 2010 Jun去編譯,但是無法執行
05/27 16:13, 22F

05/27 16:13, , 23F
而且也找不出問題所在
05/27 16:13, 23F

05/27 21:29, , 24F
從feb換成 june了?
05/27 21:29, 24F

05/28 00:19, , 25F
Jun要移除vs2010才能安裝,非常不方便
05/28 00:19, 25F

05/28 00:20, , 26F
不過結果根本沒有任何改變
05/28 00:20, 26F

05/28 18:49, , 27F
剛剛有看到,似乎Windows SDK拔掉了D3DX
05/28 18:49, 27F

05/28 18:49, , 28F
所以要用D3DX的話,要灌DXSDK
05/28 18:49, 28F

05/28 18:50, , 29F
然後不是移除VS2010,只是移除一個相關套件
05/28 18:50, 29F

05/28 18:51, , 30F
然後建議搞清楚D3D和D3DX的差別?後者僅用來輔助而已
05/28 18:51, 30F
文章代碼(AID): #1JWq0I80 (C_and_CPP)
文章代碼(AID): #1JWq0I80 (C_and_CPP)