-->

2010年9月19日 星期日

[C++] GUID <--> WString

這裡簡單介紹如何將 Windows 的 GUID 與 wstring 互轉的方式
在 DDK 裡可以使用 RtlGUIDFromString 以及 RtlStringFromGUID 完成這個功能
但其實可以只使用 CLSIDFromString 和 StringFromCLSID 就可以轉換

使用方式如下:
當完成後 GUIDToWString WStringToGUID 會回傳 true 成功 或是 false 失敗
若想知道更詳細的失敗資訊,可以使用 GetLastError() 查詢,這裡就先省略

 1 #include <windows.h>
 2 #include <string>
 3 using namespace std;
 4
 5 bool GUIDToWString(IN const GUID &guid, OUT wstring &wstrGUID) {
 6     WCHAR *lpwszGUID;
 7     HRESULT hr = StringFromCLSID(guid,(LPOLESTR *)&lpwszGUID);
 8     if (FAILED(hr)) {
 9         return false;
10     }
11     wstrGUID = lpwszGUID;
12
13     LocalFree(lpwszGUID);
14     return true;
15 }
16
17 bool WStringToGUID(IN const wstring &wstrGUID, OUT GUID &guid) {
18     HRESULT hr = CLSIDFromString((LPOLESTR)wstrGUID.c_str(), (LPCLSID)&guid);
19     if (FAILED(hr)) {
20         return false;
21     }
22
23     return true;
24 }
25
26 wstring gGUID = L"{72631E54-78A4-11D0-BCF7-00AA00B7B32A}";
27
28 int main(void) {
29     bool IsSuccess;
30
31     GUID guid;
32     IsSuccess = WStringToGUID(gGUID, guid);
33   
34     wstring wstrGUID;
35     GUIDToWString(guid, wstrGUID);
36
37     return 0;
38 }

複製代碼:

#include <windows.h>
#include <string>
using namespace std;

bool GUIDToWString(IN const GUID &guid, OUT wstring &wstrGUID) {
    WCHAR *lpwszGUID;
    HRESULT hr = StringFromCLSID(guid,(LPOLESTR *)&lpwszGUID);
    if (FAILED(hr)) {
        return false;
    }
    wstrGUID = lpwszGUID;

    LocalFree(lpwszGUID);
    return true;
}

bool WStringToGUID(IN const wstring &wstrGUID, OUT GUID &guid) {
    HRESULT hr = CLSIDFromString((LPOLESTR)wstrGUID.c_str(), (LPCLSID)&guid);
    if (FAILED(hr)) {
        return false;
    }

    return true;
}

wstring gGUID = L"{72631E54-78A4-11D0-BCF7-00AA00B7B32A}";

int main(void) {
    bool IsSuccess;

    GUID guid;
    IsSuccess = WStringToGUID(gGUID, guid);
  
    wstring wstrGUID;
    GUIDToWString(guid, wstrGUID);

    return 0;
}



沒有留言:

張貼留言