Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
73 | daniel-mar | 1 | #ifndef _UD2_GUID_H_ |
2 | #define _UD2_GUID_H_ |
||
3 | |||
4 | #include <assert.h> |
||
5 | |||
6 | // #define USE_OLE32 |
||
7 | |||
8 | #ifdef USE_OLE32 |
||
9 | #pragma comment(linker, "-lOle32") |
||
10 | #define __GUID(x) _StringToGUID(L ## x) |
||
11 | const GUID _StringToGUID(LPCWSTR lpcstrGUID) { |
||
12 | GUID guid; |
||
13 | assert(SUCCEEDED(CLSIDFromString(lpcstrGUID, &guid))); |
||
14 | return guid; |
||
15 | } |
||
16 | #else |
||
17 | #define __GUID(x) _StringToGUID(x) |
||
18 | const bool StringToGUID(const char* szGUID, GUID* g) { |
||
19 | // Check if string is a valid GUID |
||
20 | if (strlen(szGUID) != 38) return false; |
||
21 | for (int i=0; i<strlen(szGUID); ++i) { |
||
22 | char g = szGUID[i]; |
||
23 | |||
24 | if (i == 0) { |
||
25 | if (g != '{') return false; |
||
26 | } else if (i == 37) { |
||
27 | if (g != '}') return false; |
||
28 | } else if ((i == 9) || (i == 14) || (i == 19) || (i == 24)) { |
||
29 | if (g != '-') return false; |
||
30 | } else { |
||
31 | if (!((g >= '0') && (g <= '9')) && !((g >= 'A') && (g <= 'F')) && !((g >= 'a') && (g <= 'f'))) { |
||
32 | return false; |
||
33 | } |
||
34 | } |
||
35 | } |
||
36 | |||
37 | char* pEnd; |
||
38 | g->Data1 = strtoul(szGUID+1,&pEnd,16); |
||
39 | g->Data2 = strtoul(szGUID+10,&pEnd,16); |
||
40 | g->Data3 = strtoul(szGUID+15,&pEnd,16); |
||
41 | char b[3]; b[2] = 0; |
||
42 | memcpy(&b[0], szGUID+20, 2*sizeof(b[0])); g->Data4[0] = strtoul(&b[0], &pEnd, 16); |
||
43 | memcpy(&b[0], szGUID+22, 2*sizeof(b[0])); g->Data4[1] = strtoul(&b[0], &pEnd, 16); |
||
44 | for (int i=0; i<6; ++i) { |
||
45 | memcpy(&b[0], szGUID+25+i*2, 2*sizeof(b[0])); g->Data4[2+i] = strtoul(&b[0], &pEnd, 16); |
||
46 | } |
||
47 | return true; |
||
48 | } |
||
49 | const GUID _StringToGUID(const char* szGUID) { |
||
50 | GUID g; |
||
51 | assert(StringToGUID(szGUID, &g)); |
||
52 | return g; |
||
53 | } |
||
54 | #endif |
||
55 | |||
56 | #endif |
||
57 |