0

ハードウェア GUID を取得しようとしてきましたが、この関数が Web に投稿されているのを見つけました。

#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た .

したがって、現在のソリューションはGetCurrentHwProfileAor GetCurrentHwProfileWor のいずれかを使用しているようです

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