Ignore:
Timestamp:
Mar 19, 2000, 4:35:32 PM (25 years ago)
Author:
davidr
Message:

Ported changes from wine/corel sources

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:42 davidr Exp $ */
     1/* $Id: clsid.cpp,v 1.10 2000-03-19 15:33:05 davidr Exp $ */
    22/*
    33 *
     
    2424
    2525// ----------------------------------------------------------------------
     26// CLSIDFromProgID16()
     27// ----------------------------------------------------------------------
     28HRESULT 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// ----------------------------------------------------------------------
    2659// CLSIDFromProgID()
    2760// ----------------------------------------------------------------------
     
    72105// ----------------------------------------------------------------------
    73106
    74 // missing prototype
    75 LPWSTR WIN32API HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str );
    76 
    77107HRESULT WIN32API CLSIDFromStringA(
    78108    LPCSTR              lpsz,           // [in] - ASCII string CLSID
    79109    LPCLSID             pclsid)         // [out] - Binary CLSID
    80110{
    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// ----------------------------------------------------------------------
     118HRESULT 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}
    93191
    94192// ----------------------------------------------------------------------
     
    103201    oStringA            tClsId(lpsz);
    104202
    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);
    173204}
    174205
Note: See TracChangeset for help on using the changeset viewer.