1. 程式人生 > 其它 >看完紅龍書之後推薦看 Microsoft DirectX SDK (June 2010) 安裝目錄下面自帶的官方sample例子程式碼

看完紅龍書之後推薦看 Microsoft DirectX SDK (June 2010) 安裝目錄下面自帶的官方sample例子程式碼

在讀完紅龍書《DirectX 9.0 3D遊戲開發程式設計基礎》一書後,該書作者推薦去讀微軟官方的DirectX的例子程式碼(就儲存在安裝好後的DirectX SDK的安裝目錄裡面),認為讀這些例子是讀完此書後提升的絕佳選擇(此書電子版pdf第10頁記載這一說法)

具體操作:

先下載安裝 Microsoft DirectX SDK (June 2010)

然後去找D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D目錄下面的Direct3D例子(有33個,所有這33個例子編譯好的可執行檔案在

D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D\Bin 目錄下的x86和x64 兩個目錄裡面)


首先從D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D\EmptyProject 這個例子開始看,

該例子僅需要經過兩處修改,就可以在vs2019上編譯通過,生成一個藍色背景的視窗。

vs2019編譯該例子的方法,先開啟vs2019,找到D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D\EmptyProject\EmptyProject_2010.sln

選中開啟, vs2019會提示你要升級平臺什麼玩意的,不管他,點選確定,專案就打開了。

按F7編譯,報錯,

(1)說 abs 有什麼過載說不清的問題之類,不管,點選報錯定位到出錯處,把abs修改為fabs

(2)修復abs錯誤後,還有羅裡吧嗦的錯誤,靠!查詢解決方法,發現需要在報錯的原始檔開頭處新增一條編譯預處理指令

#pragma comment(lib, "legacy_stdio_definitions.lib")

(為何要新增此編譯預處理指令的原因?參見 https://blog.csdn.net/qq_27474555/article/details/106255215)

我把原因也直接貼這裡得了:
LNK2019 無法解析的外部符號 _vsnwprintf在DxErr.lib(dxerrw.obj)

報錯原因:vs2017預設編譯時將許多標準庫採用內聯方式處理,如果沒有可以連結的標準庫檔案,就要專門新增標準庫檔案來連結標準庫中的函式。
解決方法:
1、在報錯的原始檔新增編譯預處理指令
#pragma comment(lib, "legacy_stdio_definitions.lib")
2、在工程中配置
工程->右鍵屬性->連結器->輸入->附加依賴項 ,新增“legacy_stdio_definitions.lib”

待解決完這兩處編譯錯誤後,可以編譯生成EmptyProject.exe,一個藍色的視窗。EmptyProject.exe可以在專案的debug目錄(D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D\EmptyProject\Debug)下找到

注意: vs2019要想編譯D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D目錄下面的Direct3D例子, 是不能把這些例子程式檔案的對應目錄拷貝到其他碟符路徑下去編譯的,

那樣會報錯,說找不到D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\DXUT\Core 下面的.h 和 .cpp 檔案,或許還有其他檔案也會找不到,因為編譯時, vs2019會到 ..\..\DXUT\Core 這樣的相對路徑下去找 需要連結的檔案,所以例子程式最好放在D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D 目錄下面,其實是需要維持D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++ 這個目錄下面的Direct3D目錄和DXUT目錄的相對位置不變才行