0

我一直在尝试获取硬件 GUID,我发现此功能已发布在网络上。

#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++。也许这就是问题所在?

4

2 回答 2

1

不错的收获!(如果你可以这样称呼它)

问题是,如果您愿意,通常 GetCurrentHwProfile 将是一条捷径。当使用 UNICODE 支持编译时,它会变成 GetCurrentHwProfileW。否则,它将更改为 GetCurrentHwProfileA。

解决方案?只需在末尾添加一个 A。即 GetCurrentHwProfileA :)

BB.bbut - 请记住,如果您决定使用 unicode,则必须明确更改它。一个更简洁的解决方案是让 GetCurrentHwProfile 根据需要引用正确的。我想这可能是通过以下方式完成的:(现在懒得看。所有的 Windows 功能都使用这个技巧,猜想 minGW 人群错过了 GetCurrentHwProfile 这个小宝石)

#ifdef UNICODE
 #define GetCurrentHwProfile GetCurrentHwProfileW
#else
 #define GetCurrentHwProfile GetCurrentHwProfileA
#endif
于 2013-03-21T12:43:02.637 回答
1

该函数GetCurrentHwProfile()winbase.h头文件中声明:

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

请注意,它是GetCurrentHwProfileA(对于 Ansi)或GetCurrentHwProfileW(对于 Unicode / 宽字符)。GetCurrentHwProfile根据定义的UNICODE.

因此,当前的解决方案似乎要么使用要么GetCurrentHwProfileAGetCurrentHwProfileW做类似的事情

#ifdef UNICODE
#define GetCurrentHwProfile GetCurrentHwProfileW
#else
#define GetCurrentHwProfile GetCurrentHwProfileA
#endif
于 2013-03-21T12:48:56.460 回答