在 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 }
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;
}
沒有留言:
張貼留言