2013-03-21 88 views
0

我一直在試圖獲取硬件GUID,並且我發現這個函數在Web上發佈。GetCurrentHwProfile未在此作用域中使用MinGW的g ++編譯器進行聲明

#define _WIN32_WINNT 0x0400 

#include <windows.h> 
#include <stdio.h> 
#include <tchar.h> 

int main() 
{ 
    HW_PROFILE_INFO hwProfileInfo; 

    if(GetCurrentHwProfile(&hwProfileInfo) != NULL){ 
      printf("Hardware GUID: %s\n", hwProfileInfo.szHwProfileGuid); 
      printf("Hardware Profile: %s\n", hwProfileInfo.szHwProfileName); 
    }else{ 
      return 0; 
    } 

    getchar(); 
} 

的問題是,每當我試圖編譯它,我得到「錯誤:‘GetCurrentHwProfile’沒有在這個範圍中聲明」。我正在使用MinGW的G ++。也許這就是問題所在?

回答

1

好的! (如果你可以稱之爲)

問題是,如果你喜歡,GetCurrentHwProfile通常是一個捷徑。當用UNICODE支持進行編譯時,它變成了GetCurrentHwProfileW。否則,它將變爲GetCurrentHwProfileA。

解決方案? 只需在最後添加一個A. I.e GetCurrentHwProfileA :)

BB.b.b.ut - 記住,如果您決定使用unicode,則必須明確地更改它。一個更清潔的解決方案是使GetCurrentHwProfile根據需要引用正確的解決方案。我想這是可能的東西,如完成:(懶得現在看所有的窗戶功能用這一招,你猜MinGW的人羣中錯過了這個小寶石是GetCurrentHwProfile。)

#ifdef UNICODE 
#define GetCurrentHwProfile GetCurrentHwProfileW 
#else 
#define GetCurrentHwProfile GetCurrentHwProfileA 
#endif 
1

GetCurrentHwProfile()在聲明的功能所述winbase.h頭:

WINBASEAPI BOOL WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA); 
WINBASEAPI BOOL WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW); 

注意,它要麼是GetCurrentHwProfileA(對於ANSI)或GetCurrentHwProfileW(對於Unicode /寬字符)。根據定義的UNICODE,我找不到任何一個宏的符號GetCurrentHwProfile與兩個函數中的任何一個有關。

因此,目前的解決方案似乎爲使用GetCurrentHwProfileAGetCurrentHwProfileW或做類似

#ifdef UNICODE 
#define GetCurrentHwProfile GetCurrentHwProfileW 
#else 
#define GetCurrentHwProfile GetCurrentHwProfileA 
#endif 
相關問題