看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
damody:更新你的runtime 05/26 22:13
iamstudent:這個當然更新過了 05/26 22:51
iamstudent:我猜是編成舊版 然後新的RunTime不支援 05/26 22:52
damody:解析度是 16:10 ? 改16:9看看 05/26 23:48
damody:要看連結到的dll 可以用偵錯模式打開,然後暫停看模組 05/26 23:50
damody:然後 2010 june 是最新版 不要用feb 05/26 23:51
damody:他雖然表面上說會更新在 windows SDK可是有很多進階功能 05/26 23:52
damody:只有舊版才有 05/26 23:52
a27417332:d3d9和d3dx9是不一樣的東西吧,一個是核心一個是輔助 05/27 13:51
a27417332:然後d3d9在哪的sdk應該功能沒差,所以下載最新也可以? 05/27 13:53
iamstudent:最新的不行,比方說dxerr.h就完全消失了 05/27 14:03
iamstudent:註解掉也會留下一堆error,整個程式要大改 05/27 14:03
azureblaze:我是最新的你缺的那些我都有 05/27 15:02
azureblaze:我覺得你是include路徑沒設好 05/27 15:03
iamstudent:OK 那我再測試一次windows SDK 05/27 15:17
iamstudent:行不通,不知道你的windows SDK版本為何 05/27 15:45
iamstudent:d3d9在\Microsoft SDKs\Windows\v7.0A\Include 05/27 15:47
iamstudent:但是d3dx9與dxerr都不存在,我掃過整個資料夾了 05/27 15:48
azureblaze:不然就用dxsdk 2010 june就好了 05/27 16:02
iamstudent:那篇我有看到,而且回答還是從MS網頁上複製過來的 05/27 16:12
iamstudent:目前就是用dx sdk 2010 Jun去編譯,但是無法執行 05/27 16:13
iamstudent:而且也找不出問題所在 05/27 16:13
damody:從feb換成 june了? 05/27 21:29
iamstudent:Jun要移除vs2010才能安裝,非常不方便 05/28 00:19
iamstudent:不過結果根本沒有任何改變 05/28 00:20
a27417332:剛剛有看到,似乎Windows SDK拔掉了D3DX 05/28 18:49
a27417332:所以要用D3DX的話,要灌DXSDK 05/28 18:49
a27417332:然後不是移除VS2010,只是移除一個相關套件 05/28 18:50
a27417332:然後建議搞清楚D3D和D3DX的差別?後者僅用來輔助而已 05/28 18:51