none
Visual C++ 2008 與 WDK 的問題.

    問題

  • 各位先進, 小弟才剛開始始用 VC++, 現碰到一個問題, 因在專案中有用到 WDK 的 Header files, 如下,
    extern "C"{
    #include "setupapi.h"
    #include "hidsdi.h"
    #include "hidusage.h"
    #include "hidpi.h"
    }
    但在compile 之後發生以下問題
    C:\WinDDK\7600.16385.0\inc\api\setupapi.h(60) : error C2143: 語法錯誤 : 遺漏 ';' (在 '*' 之前)
    C:\WinDDK\7600.16385.0\inc\api\setupapi.h(60) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
    C:\WinDDK\7600.16385.0\inc\api\setupapi.h(60) : error C4430: 遺漏型別規範 - 假設為 int。注意: C++ 不支援 default-int
    ........................

    經查是 setupapi.h 內粗體字那一行出問題
    #ifndef __LPGUID_DEFINED__
    #define __LPGUID_DEFINED__
    typedef GUID *LPGUID;
    #endif

    我想 WDK 應不可能出問題, 我一定在什麼地方遺漏了什麼.

    請各位先進指較, 謝謝!!!!!

    David Gau
    2010年3月10日 上午 02:43

解答

  • 遺漏 ';' (在 '*' 之前)發生在typedef GUID *LPGUID; 表示GUID這個型態不認識, 所以您可以使用滑鼠右鍵點中GUID, 選擇GO TO DEFINITION, 查到定義GUID型態的Header file之後, 將header file include 在setupapi.h之前



    另外C++ 不支援 default-int, 表示您有函數未宣告傳回值, C++無法像C語言一樣, 將未宣告傳回值的函數視回傳回預設的int型態
    • 已標示為解答 Lolota Lee 2010年3月17日 上午 06:57
    2010年3月11日 下午 12:37

所有回覆

  • 遺漏 ';' (在 '*' 之前)發生在typedef GUID *LPGUID; 表示GUID這個型態不認識, 所以您可以使用滑鼠右鍵點中GUID, 選擇GO TO DEFINITION, 查到定義GUID型態的Header file之後, 將header file include 在setupapi.h之前



    另外C++ 不支援 default-int, 表示您有函數未宣告傳回值, C++無法像C語言一樣, 將未宣告傳回值的函數視回傳回預設的int型態
    • 已標示為解答 Lolota Lee 2010年3月17日 上午 06:57
    2010年3月11日 下午 12:37
  • 謝謝 tihs,
    如你所說找出 setupapi.h 之前必 inc guiddef.h 但又發生如下的問題
    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(48) : error C2065: '_MaxCount' : 未宣告的識別項
    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(48) : error C3861: '_Out_opt_bytecap_': 找不到識別項
    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(48) : error C2144: 語法錯誤 : 'void' 必須在 ')' 之後
    C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(48) : warning C4229: 過時的用法 : 已忽略資料上的修飾詞
    ..........................................一大堆問題, string.h 怎麼也出問題,
    原來在 guiddef.h 有 inc <string.h>, 照樣如你建議往上找,可是這些問題找不到定義,也找不到來源,
    怎麼這樣,

    我另外試著在 VC++ 6.0 開啟新專案, inc
    extern "C"{
    #include "setupapi.h"
    #include "hidsdi.h"
    #include "hidusage.h"
    #include "hidpi.h"
    }
    compile 之後, 竟然完全沒有任何問題, 可以 work ,
    那四個 header files, 是microsoft最新WDK提供的,
    難道問題是出在 VC++2008 Express版 ?? 不支援 wdk ?? ??? ?????

    各位高手, answer,answer,answer??????
    謝謝!!!!!!!!

    2010年3月15日 上午 02:52
  • 應該不是不能用, 而是VC++ 6.0和VC++ 2008的Compiler在編譯Source時做法有改變, 例如函數未註明傳回值型態的寫法在VC++ 2008就不能接受
    2010年3月16日 下午 01:26