HRESULT OpenPropSeqStorage (DWORD dwMode, IStorage **ppStorage) { WStorage StgRoot; WStorage Stg; if (!DEX_GetProjectStorage(*StgRoot.ppv())) return E_UNEXPECTED; HRESULT hr = OpenStorage (g_cbPropertySequences, dwMode, StgRoot, Stg.ppi()); if (FAILED(hr)) { if (!(STGM_WRITE & dwMode) && !(STGM_READWRITE & dwMode)) return hr; RETURN_FAILED_HRESULT(StgRoot -> CreateStorage (g_cbPropertySequences, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_TRANSACTED | STGM_CREATE, 0L, 0L, Stg.ppi())); RETURN_FAILED_HRESULT(Stg -> SetClass (CLSID_PropertyActionSequence)); } *ppStorage = Stg.detach(); return S_OK; }
// Öffnen des PropertySequenceSubStorages static HRESULT GetSubPropSeqStorage (IStorage **ppIStg) { if (NULL == ppIStg) return E_POINTER; WStorage IRootStg; if (!DEX_GetProjectStorage(*IRootStg.ppv())) return E_FAIL; USES_CONVERSION; WStorage IStg; HRESULT hr = IRootStg -> OpenStorage (A2OLE(g_cbPropertyChoices), NULL, STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, NULL, 0L, IStg.ppi()); if (FAILED(hr)) { // mit Schreibschutz versuchen hr = IRootStg -> OpenStorage (A2OLE(g_cbPropertyChoices), NULL, STGM_READ|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, NULL, 0L, IStg.ppi()); if (FAILED(hr)) return hr; } CLSID clsId; hr = ReadClassStg (IStg, &clsId); if (FAILED(hr)) return hr; if (!IsEqualCLSID (clsId, CLSID_PropertyChoice)) return E_FAIL; *ppIStg = IStg.detach(); return hr; }
// Öffnen des PropertySequenceSubStorages static HRESULT GetSubPropSeqStorage (IStorage **ppIStg, bool fCreate = false) { if (NULL == ppIStg) return E_POINTER; WStorage IRootStg; if (!DEX_GetProjectStorage(*IRootStg.ppv())) return E_FAIL; USES_CONVERSION; WStorage IStg; HRESULT hr = E_FAIL; { bool fRO = false; hr = IRootStg -> OpenStorage (A2OLE(g_cbPropertySequences), NULL, STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, NULL, 0L, IStg.ppi()); if (FAILED(hr)) { if (STG_E_FILENOTFOUND == GetScode(hr) && fCreate) { // existiert nicht, evtl. neu erzeugen hr = IRootStg -> CreateStorage (A2OLE(g_cbPropertySequences), STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED|STGM_CREATE, 0L, 0L, IStg.ppi()); if (SUCCEEDED(hr)) hr = WriteClassStg (IStg, CLSID_PropertyActionSequence); } else if (STG_E_ACCESSDENIED == GetScode(hr)) { // mit Schreibschutz versuchen hr = IRootStg -> OpenStorage (A2OLE(g_cbPropertySequences), NULL, STGM_READ|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, NULL, 0L, IStg.ppi()); fRO = true; } else return hr; } if (SUCCEEDED(hr)) { CLSID clsId; hr = ReadClassStg (IStg, &clsId); if (FAILED(hr)) return hr; if (!IsEqualCLSID(clsId, CLSID_PropertyActionSequence) && !IsEqualCLSID(clsId, CLSID_NULL)) { return E_FAIL; } if (IsEqualCLSID(clsId, CLSID_NULL) && !fRO) hr = WriteClassStg (IStg, CLSID_PropertyActionSequence); } } if (FAILED(hr)) return hr; *ppIStg = IStg.detach(); return hr; }