VS2005+WINDDK+Driver Studio 3.2編譯出第一個測試驅動程式 zz
搭建好windows裝置驅動程式的開發環境,終於能在VS2005中編譯出第一個測試驅動程式了,現在把安裝和編譯的過程中遇到的一些細節問題總結一下。
1. WINDD下載的是2600版本,不知道跟xp sp1 DDK和xp sp2 DDK有什麼區別,找後面兩個版本的DDK下載地址找了好久都沒找到,驅運之家有下載,但是要高階會員才能下,要Money。電驢裡搜到一個xp sp1DDK的下載連結,但是下不了,在此把我找到的2600版本的下載地址貼出來
2. 注意安裝DDK時,建議將例子等全部安裝,否則Driver Studio編譯時會提示缺少標頭檔案
3. 在VS2005環境下,安裝
安裝DriverStudio3.2 過程中出現DSDDKEnv8.dll failed to register錯誤的解決方法原因:與VS2005整合時會發生此錯誤。解決方法,下載補丁:
>Extract it into a temp directory.
>Copy the file DSDDKEnv8.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin directory.
>Select "yes" if prompted to copy over an existing one.
>Copy the file DSDDKEnv8UI.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin/1033 directory. Select "yes" if prompted to copy over an existing one.
>Then unregister the older version
Go to start->run and type "regsvr32 -u " <INSTALL_DIR> /DriverStudio/Common/ Bin/ dsddkenv8.dll"
>Then register the new copy
Go to start->run and type "regsvr32 <INSTALL_DIR>/ DriverStudio/ Common/ Bin/ dsddkenv8.dll"
>DriverStudio menu should now be part of the VisualStudio 2005 menu
如果在vs2005+補丁後生成的解決方案檔案.sln無法雙擊開啟工程時可以使用文字編輯器開啟.sln檔案在第二行加入“#
Visual Studio 2005”儲存即可,例如:
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aa", "driver/aa.vcproj", "{6A0A9D07-FD4C-4D7C-805D-48D25FB4BE6C}" EndProject
根治方法:開啟/DriverStudio/DriverWizard/Templates目錄的WdmDriver.sln.net檔案找到“Microsoft Visual Studio Solution File, Format Version 9.00”這一行,在其後下一行加入“# Visual Studio 2005”儲存即可,以後用DriverWizard生成的工程就可以正常雙擊打開了。
4. 編譯中可能遇到的問題(VS2005環境下)
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
這個錯誤,解決方法如下:開啟project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430選項。
error LNK2019: unresolved external symbol
error LNK2001: unresolved external symbol
解決:在連結選項中加入 /verbose:lib,就可以看到連結生成執行檔案時連結程式所要連結的庫的路徑。發現所有連結庫的路徑為DDK所在路徑。原來先前用VS寫驅動時,在VC++ Directories-->Library Files中加入了驅動庫的路徑。只要把DDK的路徑去掉,讓聯結器自動尋找預設庫進行連結就沒有該問題了。
5. 用DriverWizard 新建的工程要在VS2005中編譯必須先設定DDK路徑,在VS2005選單欄Toos=>DriverStudio=>DriverStudio=>DDK Build Settings中設定DDK Root Directory
6. 然後還要編譯DriverStudio安裝目錄DriverStudio/DriverWorks/source/VdwLibs2005.sln,以得到vdw_wdm.lib這個庫檔案。編譯時,注意用VC開啟VdwLibs2005.sln工程檔案後,有兩個工程,要先將VdwLibs工程設為當前Active Project,然後右擊選擇“Property” ,在VdwLibs
Property Pages中Configuration要改成“win32 Active(WDM Checked)”
7. 編譯驅動時,不要使用VC的"編譯",那會產生很多莫名其妙的錯誤,而應該選擇"DriverStudio"-->“Build with BUILD.exe”。
1>NMAKE : U1073: don't know how to make 'D:/WINDDK/2600/lib/wxp/i386/ntstrsafe.lib'這個錯誤。
再上網查查。
原來driverstudio產生的驅動工程都會要連線ntstrsafe.lib這個庫,但實際上這個庫並不存在,在Project的Property pages裡的Link=>Input=>Additional Dependencies項中去掉這個庫就可以了,還有說DDK2003版本就不存在這個問題,還沒試過。
於是去掉之。可是問題依然存在。
狂暈!
最後終於在網上看到一個解決辦法
就是將工程中的sources檔案裡邊的:
TARGETLIBS=$(DDK_LIB_PATH)/ntstrsafe.lib $(DDK_LIB_PATH)/csq.lib
直接刪除。就行了。
編譯後終於成了