從 Visual Studio 2008 編譯 DevCon

Device Console (DevCon) Tool 是一個命令列下的工具程式,可以用來管理電腦上的 Driver,而我就需要它來重新啟動 Display driver。(節錄實作步驟)

DevCon 是 WDK 內的一項工具,為了要相容 Windows XP,所以安裝 WDK 7.1.0




目前只需要 Full Development Environment (第一次安裝沒有選擇 Tools,造成編譯時有 Warning message)。安裝完畢後,進入 Windows 7 x64 Checked Build 編譯環境,它會幫我們做好一些相關的設定 (例如 Include & Library path 等等)


DevCon 的 Source Code 位於 C:\WinDDK\7600.16385.1\src\setup\devcon (習慣上我還是喜歡另外 Copy 一份再編譯)

在該目錄下有一份說明文件 devcon.htm,裡面提到要編譯只要打 build -c 就可以了


出師不利,結果是忘了程式路徑不能有空白,換個位置就 OK 了


執行一下 devcon restart =display 看看,奇怪,怎麼會失敗呢?


原來是需要管理者權限,用 Run As Administrator 就可以了。接下來就是要把這一段相關的程式碼移植到我的程式中,所以當然要在 Visual Studio 2008 中可以執行,以下就開始來設定吧!


首先打開 sources 看看專案需要那些檔案,然後建立一個空的專案,把這些檔案加進來吧

SOURCES=msg.mc     \
        devcon.rc  \
        devcon.cpp \
        dump.cpp   \
        cmds.cpp

其中 Visual Studio 2008 並不認得 msg.mc  (Message file) 該如何處理,所以應該自訂 Custom Build 的方式,不過目前還不會用,所以先用手動的方式吧


在 Build Environment 下執行 mc msg.mc,執行完畢後就會產生下列三個檔案,一樣加入專案中吧

msg.h
msg.rc (devcon.rc 會 include,所以不需要加入專案中)
MSG00001.bin

第一次編譯就 ... 少了 Include path


到 Build Environment 下打 set 就可以看到一堆,目前只要挑我們需要用到的就可以了



再度編譯時還是一堆問題,原因是沒有設定 UNICODE (在 sources 中有設定)


接下來只剩兩個錯誤了,看起來跟我要的功能沒有關係,所以先忽略吧,有空再來解 (後來確認只有 x86 才會,x64 是正常的)


接下來就是 Library 了,先看看 sources 中有那些吧

TARGETLIBS=\
        $(SDK_LIB_PATH)\advapi32.lib  \
        $(SDK_LIB_PATH)\kernel32.lib  \
        $(SDK_LIB_PATH)\ntdll.lib     \
        $(SDK_LIB_PATH)\ole32.lib     \
        $(SDK_LIB_PATH)\setupapi.lib  \
        $(SDK_LIB_PATH)\shell32.lib   \
        $(SDK_LIB_PATH)\user32.lib

依序把這些檔案加入專案中,不過很多檔案原本父代繼承就有了


另外還要設一下 Library path (我原本是設定 amd64,結果一直 link error。後來才驚覺我的程式是 x86 版本)


所以還得研究一下如何建置 x64 的環境,其實只要到組態管理員去新增 x64 平台就可以了。


然後把 Library path 指到 amd64 就可以了。總算編譯成功了!

不過 Debug 執行怎麼還是不行?我又忘了要 Administrator 的權限,把 Visual Studio Run as Administrator 就 OK 了


那我原本的程式是 x86 要如何整合啊?看來還有一段很長的路要走啊


32-bit / 64-bit 版本無法共用,可以分成兩個 DLL,再依據目前的 OS 呼叫嗎?

實作步驟
  1. 複製 Sample code 至其它路徑 (不含空白)
  2. 從 Build environment 執行 mc msg.mc 產生對應的檔案
  3. 以 Administrator 權限執行 Visual Studio 2008 建立空白專案
  4. 到組態管理員新增 x64 平台
  5. 將現有檔案加入專案中 (不含 msg.rc)
  6. 使用 UNICODE (所有平台)
  7. 新增 Include path (所有平台)
  8. Warning Level 4 & Treat Warning As Errors (所有平台)
  9. 新增 Library path (個別設定)
  10. 新增 Library (所有平台)
  11. 設定程式需要 Administrator 權限 (所有平台)
  12. 設定命令列參數開始 Debug 吧

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯