Visual C++ 2008 與 WDK 的問題.
-
2010年3月10日 上午 02:43各位先進, 小弟才剛開始始用 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月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月15日 上午 02:52
謝謝 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月16日 下午 01:26應該不是不能用, 而是VC++ 6.0和VC++ 2008的Compiler在編譯Source時做法有改變, 例如函數未註明傳回值型態的寫法在VC++ 2008就不能接受

