Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
	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;
	}
Beispiel #4
0
// Ö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;
}
Beispiel #5
0
// Ö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;
}