Changeset 3167 for trunk/src/ole32/clsid.cpp
- Timestamp:
- Mar 19, 2000, 4:35:32 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ole32/clsid.cpp
r1822 r3167 1 /* $Id: clsid.cpp,v 1. 9 1999-11-23 20:37:42davidr Exp $ */1 /* $Id: clsid.cpp,v 1.10 2000-03-19 15:33:05 davidr Exp $ */ 2 2 /* 3 3 * … … 24 24 25 25 // ---------------------------------------------------------------------- 26 // CLSIDFromProgID16() 27 // ---------------------------------------------------------------------- 28 HRESULT WIN32API CLSIDFromProgID16( 29 LPCOLESTR16 lpszProgID, // [in] - UNICODE program id as found in registry 30 LPCLSID pclsid) // [out] - CLSID 31 { 32 dprintf(("OLE32: CLSIDFromProgID16")); 33 34 LONG lDataLen = 80; 35 oStringA szKey(lpszProgID); 36 oStringA szCLSID(lDataLen, 1); 37 HKEY hKey; 38 HRESULT rc; 39 40 // Create the registry lookup string... 41 szKey += "\\CLSID"; 42 43 // Try to open the key in the registry... 44 rc = RegOpenKeyA(HKEY_CLASSES_ROOT, szKey, &hKey); 45 if (rc != 0) 46 return OLE_ERROR_GENERIC; 47 48 // Now get the data from the _default_ entry on this key... 49 rc = RegQueryValueA(hKey, NULL, szCLSID, &lDataLen); 50 RegCloseKey(hKey); 51 if (rc != 0) 52 return OLE_ERROR_GENERIC; 53 54 // Now convert from a string to a UUID 55 return CLSIDFromString16(szCLSID, pclsid); 56 } 57 58 // ---------------------------------------------------------------------- 26 59 // CLSIDFromProgID() 27 60 // ---------------------------------------------------------------------- … … 72 105 // ---------------------------------------------------------------------- 73 106 74 // missing prototype75 LPWSTR WIN32API HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str );76 77 107 HRESULT WIN32API CLSIDFromStringA( 78 108 LPCSTR lpsz, // [in] - ASCII string CLSID 79 109 LPCLSID pclsid) // [out] - Binary CLSID 80 110 { 81 LPWSTR lpszOle = HEAP_strdupAtoW(GetProcessHeap(), 82 0, 83 lpsz); 84 HRESULT hRes; 85 86 dprintf(("OLE32: CLSIDFromStringA")); 87 88 hRes = CLSIDFromString(lpszOle, pclsid); 89 HeapFree(GetProcessHeap(), 0, lpszOle); 90 return hRes; 91 } 92 111 return CLSIDFromString16(lpsz, pclsid); 112 } 113 114 115 // ---------------------------------------------------------------------- 116 // CLSIDFromString16() 117 // ---------------------------------------------------------------------- 118 HRESULT WIN32API CLSIDFromString16( 119 LPCOLESTR16 lpsz, // [in] - Unicode string CLSID 120 LPCLSID pclsid) // [out] - Binary CLSID 121 { 122 dprintf(("OLE32: CLSIDFromString16")); 123 124 // Convert to binary CLSID 125 char *s = (char *) lpsz; 126 char *p; 127 int i; 128 char table[256]; 129 130 /* quick lookup table */ 131 memset(table, 0, 256); 132 133 for (i = 0; i < 10; i++) 134 { 135 table['0' + i] = i; 136 } 137 for (i = 0; i < 6; i++) 138 { 139 table['A' + i] = i+10; 140 table['a' + i] = i+10; 141 } 142 143 /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */ 144 145 if (lstrlenA(lpsz) != 38) 146 return OLE_ERROR_OBJECT; 147 148 p = (char *) pclsid; 149 150 s++; /* skip leading brace */ 151 for (i = 0; i < 4; i++) 152 { 153 p[3 - i] = table[*s]<<4 | table[*(s+1)]; 154 s += 2; 155 } 156 p += 4; 157 s++; /* skip - */ 158 159 for (i = 0; i < 2; i++) 160 { 161 p[1-i] = table[*s]<<4 | table[*(s+1)]; 162 s += 2; 163 } 164 p += 2; 165 s++; /* skip - */ 166 167 for (i = 0; i < 2; i++) 168 { 169 p[1-i] = table[*s]<<4 | table[*(s+1)]; 170 s += 2; 171 } 172 p += 2; 173 s++; /* skip - */ 174 175 /* these are just sequential bytes */ 176 for (i = 0; i < 2; i++) 177 { 178 *p++ = table[*s]<<4 | table[*(s+1)]; 179 s += 2; 180 } 181 s++; /* skip - */ 182 183 for (i = 0; i < 6; i++) 184 { 185 *p++ = table[*s]<<4 | table[*(s+1)]; 186 s += 2; 187 } 188 189 return S_OK; 190 } 93 191 94 192 // ---------------------------------------------------------------------- … … 103 201 oStringA tClsId(lpsz); 104 202 105 HRESULT ret = OLE_ERROR_GENERIC; 106 107 // Convert to binary CLSID 108 char *s = (char *) tClsId; 109 char *p; 110 int i; 111 char table[256]; 112 113 /* quick lookup table */ 114 memset(table, 0, 256); 115 116 for (i = 0; i < 10; i++) 117 { 118 table['0' + i] = i; 119 } 120 for (i = 0; i < 6; i++) 121 { 122 table['A' + i] = i+10; 123 table['a' + i] = i+10; 124 } 125 126 /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */ 127 128 if (lstrlenW(lpsz) != 38) 129 return OLE_ERROR_OBJECT; 130 131 p = (char *) pclsid; 132 133 s++; /* skip leading brace */ 134 for (i = 0; i < 4; i++) 135 { 136 p[3 - i] = table[*s]<<4 | table[*(s+1)]; 137 s += 2; 138 } 139 p += 4; 140 s++; /* skip - */ 141 142 for (i = 0; i < 2; i++) 143 { 144 p[1-i] = table[*s]<<4 | table[*(s+1)]; 145 s += 2; 146 } 147 p += 2; 148 s++; /* skip - */ 149 150 for (i = 0; i < 2; i++) 151 { 152 p[1-i] = table[*s]<<4 | table[*(s+1)]; 153 s += 2; 154 } 155 p += 2; 156 s++; /* skip - */ 157 158 /* these are just sequential bytes */ 159 for (i = 0; i < 2; i++) 160 { 161 *p++ = table[*s]<<4 | table[*(s+1)]; 162 s += 2; 163 } 164 s++; /* skip - */ 165 166 for (i = 0; i < 6; i++) 167 { 168 *p++ = table[*s]<<4 | table[*(s+1)]; 169 s += 2; 170 } 171 172 return S_OK; 203 return CLSIDFromString16(tClsId, pclsid); 173 204 } 174 205
Note:
See TracChangeset
for help on using the changeset viewer.