在編譯DirectX程式時總是出現諸如“error C2061: syntax error : identifier 'LPDIRECTDRAWSURFACE7'”的錯誤,即便是安裝了DirectX的SDK也一樣,這讓剛剛一腔熱血奔赴遊戲開發的初學者來說真是當頭一棒深受打擊,不過沒關係,下面我將詳細說明問題產生的原因及其解決方案。
首先,要開發DirectX程式,必須安裝DirectX SDK,到網上都能找到,9.0 的 SDK 大概227兆大小;
安裝完成後就可以進行DirectX程式設計了,一般我們都知道,要使用SDK,就要包含它的標頭檔和lib庫,參照SDK提供的sample,做一個最簡單的DX程式,但是我們馬上會發現,即使我們包含了#include "ddshow.h"等必須的標頭檔、在Settings裡麵包含了dxguid.lib、ddraw.lib、dsound.lib等庫檔案,編譯時間總會出現這樣的錯誤:
G:/.....xx.h(209) : error C2061: syntax error : identifier 'LPDIRECTDRAWSURFACE7'
當然了,意思是說我不認識“LPDIRECTDRAWSURFACE7”這個傢伙,那麼好,從Tools->Options...->Directories中將DX SDK 的Include目錄(比如你的SDK安裝在了D:盤的DXSDK下,則Include目錄為D:/DXSDK/Include)加進去、將DX SDK 的lib目錄加進去,然後編譯,暈啊,還是一如既往的不認識LPDIRECTDRAWSURFACE7符號,忽然想到編譯器的尋找順序問題,遂重新進入Tools->Options...->Directories中,將Include裡的DXSDK的目錄往上移到第一行,編譯,OK了@_@
不過這時候又出現了新情況:
xx.obj : error LNK2001: unresolved external symbol _DirectDrawCreateEx@16
xx.obj : error LNK2001: unresolved external symbol _IID_IDirectDraw7
找不到連結符號DirectDrawCreateEx,同樣的問題:包含了新標頭檔,連結了老lib庫,所以有些函數是找不到的,同樣,進入Tools->Options...->Directories中,將lib裡的DXSDK的目錄往上移到第一行,編譯,OK。
總結:一般出現找不到標頭檔的錯誤,我們都能想到可能是找不到SDK目錄的問題,在Tools->Options...->Directories中將相應include、lib目錄加進去就行了,但是接下來的錯誤往往讓我們一頭霧水,因為該加的都加了,很容易忽略目錄順序的問題。
over了。