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

看板C_and_CPP作者 (uid88)時間11年前 (2014/05/28 19:51), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《iamstudent (stu)》之銘言: : 開發平台(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. 基本上這種錯誤是因為編譯/執行時include/lib/dll版本不一致的結果。 DirectX的版本問題常常是個麻煩,扯上D3DX更是麻煩(如D3DX9_xx.dll版本)。最好找你 手上DirectX程式當時所用的DirectX SDK,如果沒有也建議盡量找舊一點的版本。 Build 時要確定include和lib都要依DirectX SDK -> (Windows SDK) -> Visual C的優先 順序。 執行時更要把PATH設好,用Process Explorer之類的確定用的是該DirectX SDK runtime 的DLL。 : 我第一個動作是上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也不確定 如上面所說,用process explorer看看 : 但是感覺上應該是這樣 : 有在VC專案設定dll的資料夾到DirectX SDK的dll資料夾內 這要請你說明清楚一點是哪一個設定? Project Properties -> Configuration Properties -> C/C++ -> General -> Additional Include Directories要加DirectX SDK的include到最前面 Project Properties -> Configuration Properties -> Linker -> General -> Additional library Directories要加DirectX SDK的lib到最前面 如果要在Visual Studio裡執行: Project Properties -> Configuration Properties -> Debugging -> Environment要設 PATH,加DirectX SDK runtime到最前面 如果還是不行,請po 1. Project Properties -> Configuration Properties -> C/C++ -> Command Line內容 2. Project Properties -> Configuration Properties -> Linker -> Command Line內 容 3. 執行時Process Explorer看到的DLL list(要含Path) : 但是感覺沒有效果,似乎有個優先權更高的設定不知道在系統哪裡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 17.244.72.230 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401306696.A.423.html

05/29 18:47, , 1F
謝謝,解決掉了。我說一下心得
05/29 18:47, 1F

05/29 18:47, , 2F
DX SDK與Win SDK都要安裝,設定上DX SDK優先
05/29 18:47, 2F

05/29 18:48, , 3F
這樣就可以了
05/29 18:48, 3F
文章代碼(AID): #1JXZv8GZ (C_and_CPP)
文章代碼(AID): #1JXZv8GZ (C_and_CPP)