Ignore:
Timestamp:
Mar 19, 2000, 11:33:36 PM (25 years ago)
Author:
davidr
Message:

Created ReadClassStm, WriteClassStm, ProgIDFromCLSID

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ole32/clsid.cpp

    r3167 r3170  
    1 /* $Id: clsid.cpp,v 1.10 2000-03-19 15:33:05 davidr Exp $ */
     1/* $Id: clsid.cpp,v 1.11 2000-03-19 22:32:12 davidr Exp $ */
    22/*
    33 *
     
    332332}
    333333
     334// ----------------------------------------------------------------------
     335// ReadClassStm
     336// ----------------------------------------------------------------------
     337HRESULT WIN32API ReadClassStm(IStream *pStm, CLSID *rclsid)
     338{
     339    ULONG nbByte;
     340    HRESULT res;
     341
     342    dprintf(("OLE32: ReadClassStm"));
     343
     344    if (rclsid == NULL)
     345        return E_INVALIDARG;
     346
     347    res = IStream_Read(pStm,(void*)rclsid,sizeof(CLSID),&nbByte);
     348
     349    if (FAILED(res))
     350        return res;
     351
     352    if (nbByte != sizeof(CLSID))
     353        return S_FALSE;
     354
     355    return S_OK;
     356}
     357
     358// ----------------------------------------------------------------------
     359// WriteClassStm
     360// ----------------------------------------------------------------------
     361HRESULT WIN32API WriteClassStm(IStream *pStm, REFCLSID rclsid)
     362{
     363    dprintf(("OLE32: WriteClassStm"));
     364
     365    if (rclsid == NULL)
     366        return E_INVALIDARG;
     367
     368    return IStream_Write(pStm, rclsid, sizeof(CLSID), NULL);
     369}
     370
     371// ----------------------------------------------------------------------
     372// ProgIDFromCLSID
     373// ----------------------------------------------------------------------
     374HRESULT WIN32API ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID)
     375{
     376    oStringA            tClsId(clsid);
     377    oStringA            szKey("CLSID\\");
     378    LONG                lDataLen = 255;
     379    oStringA            szProgID(lDataLen, 1);
     380    HKEY                hKey;
     381    HRESULT             rc;
     382    LPOLESTR            tmp;
     383    LPMALLOC            pMllc;
     384
     385    dprintf(("OLE32: ProgIDFromCLSID"));
     386    dprintf(("       clsid = %s", (char *)tClsId));
     387
     388    szKey += tClsId + "\\ProgID";
     389
     390    // Open key...
     391    if (RegOpenKeyA(HKEY_CLASSES_ROOT, szKey, &hKey))
     392        return REGDB_E_CLASSNOTREG;
     393
     394    // Get default string from the key...
     395    rc = RegQueryValueA(hKey, NULL, szProgID, &lDataLen);
     396    RegCloseKey(hKey);
     397    if (rc != 0)
     398        return REGDB_E_CLASSNOTREG;
     399
     400    if (CoGetMalloc(0, &pMllc))         // Singleton instance, no need to release
     401        return E_OUTOFMEMORY;
     402
     403    tmp = (LPOLESTR)IMalloc_Alloc(pMllc, (strlen(szProgID) + 1) * 2);
     404    if (tmp == NULL)
     405        return E_OUTOFMEMORY;
     406
     407    AsciiToUnicode(szProgID, tmp);
     408    *lplpszProgID = tmp;
     409
     410    return S_OK;
     411}
Note: See TracChangeset for help on using the changeset viewer.