DirectX中使用shader時 SetTechnique彈出runtime error(ESP錯誤) 的處理

    今天在代碼機上寫shader的時候,D3DXCreateEffectFromFile已經成功了,但是程序一旦執行到pEffect->SetTechnique("TechName")時就彈出一個運行時錯誤,錯誤內容如下:

   Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.


  糾結了半天,沒有找到什麼原因,首先肯定Shader代碼是沒問題的,一開始以爲是因爲忽略了libcp.lib(編譯器是VS2010)導致的,結果不然。

  後來通過反彙編,查看SetTechnique中的函數調用,通過函數地址反查到了函數的名稱,結果這個函數並不是SetTechnique中正確的函數版本,

  這樣一來就知道了原來是引用的dx lib文件不對。。

  

  最後終於明白了,我的代碼機裝了好幾個版本的DX SDK,包含的頭文件的順序和引用的lib的順序不同,導致了同文件和lib庫不匹配,因此出現了這個錯誤。


  解決辦法是:

         在項目屬性中的VC++目錄選項中將包含目錄和庫目錄中的引用的DX頭文件目錄和DX庫目錄的次序調整一致即可。。。

         ps: 以上解決辦法只適用於vs2008 vs2010, vs2005用戶請在工具->選項->VC++目錄中設置。


   總結:

         在進行3D開發時,要管理好自己的DX庫, 尤其是安裝了多個DX版本的時候,頭文件順序和庫文件順序一定要一致。 如果電腦上只安裝了一個DX版本基本不會有這種糾結的問題發生。。。

           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章