HRESULT CIMacroScriptImp :: DestroyStorage() { CEnumMacroScripts *pEn = NULL; HRESULT hr = m_pMacroScripts -> GetEnum (&pEn); if (FAILED(hr)) return hr; CObArray *pA = pEn -> GetArray (); pEn -> Release(); if (0 != ULONG(pA -> GetSize())) return hr; USES_CONVERSION; LPSTORAGE pIStorage = NULL; if (NULL == DEX_GetProjectStorage (pIStorage)) { if (m_pIRootStorage) { hr = m_pIRootStorage -> DestroyElement(A2OLE("MacroScripts")); if (FAILED(hr) && GetScode(hr) != STG_E_FILENOTFOUND) return hr; hr = m_pIRootStorage -> Commit(STGC_DEFAULT); if (FAILED(hr)) return hr; } } else { hr = m_pMacroScripts -> GetIPersistStorage() -> HandsOffStorage(); if (FAILED(hr)) { pIStorage -> Release(); return hr; } hr = pIStorage -> DestroyElement(A2OLE("MacroScripts")); pIStorage -> Release(); } return hr; }
static HRESULT SavePropSeq ( LPCSTR pcDesc, IPropertyActionSequence *pISeq, IStorage *pIStg) { HRESULT hr = E_FAIL; WStorage IStg (pIStg); USES_CONVERSION; if (NULL == pIStg) { // SubStorage anlegen, da es noch nicht existiert WStorage IRootStg; if (!DEX_GetProjectStorage(*IRootStg.ppv())) return E_FAIL; hr = IRootStg -> CreateStorage (A2OLE(g_cbPropertyChoices), STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_TRANSACTED, 0L, 0L, IStg.ppi()); if (FAILED(hr)) return hr; hr = WriteClassStg (IStg, CLSID_PropertyChoice); if (FAILED(hr)) return hr; } try { WStream IStm; WPersistStream IPersistStm (pISeq); // throws hr string strName = MakeStreamName(pcDesc); // Stream erzeugen hr = IStg -> CreateStream (A2OLE(strName.c_str()), STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0L, 0L, IStm.ppi()); if (FAILED(hr)) _com_issue_error(hr); hr = OleSaveToStream (IPersistStm, IStm); // und wegschreiben if (FAILED(hr)) _com_issue_error(hr); hr = IStm -> Commit (STGC_DEFAULT); if (FAILED(hr)) _com_issue_error(hr); } catch (_com_error& hr) { return _COM_ERROR(hr); } hr = IStg -> Commit (STGC_DEFAULT); if (SUCCEEDED(hr)) DEX_SetDirtyGeoDB(true); return hr; }
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; }