StgCreatePropSetStg Sample
The StgCreatePropSetStg.cpp sample shows how the StgCreatePropSetStg function can be used to create an IPropertySetStorage interface on top of any given IStorage interface.
//+=================================================================== // // To Build: cl /GX StgCreatePropSetStg.cpp // //+=================================================================== #define UNICODE #define _UNICODE #define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <windows.h> #include <ole2.h> #pragma comment( lib, "ole32.lib" ) IPropertyStorage* CreatePropertySetInStorage( IStorage *pStg, const FMTID &fmtid ) { HRESULT hr = S_OK; IPropertySetStorage *pPropSetStg = NULL; IPropertyStorage *pPropStg = NULL; try { hr = StgCreatePropSetStg( pStg, 0 /*reserved*/, &pPropSetStg ); if( FAILED(hr) ) throw L"Failed StgCreatePropSetStg (%08x)"; hr = pPropSetStg->Create( fmtid, NULL, PROPSETFLAG_DEFAULT, STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropStg ); if( FAILED(hr) ) throw L"Failed IPropertySetStorage::Create (%08x)"; // Success. The caller must now call Release on both // pPropSetStg and pStg. } catch( const WCHAR *pwszError ) { wprintf( L"Error: %s (%08x)\n", pwszError, hr ); } if( NULL != pPropSetStg ) pPropSetStg->Release(); return( pPropStg ); } extern "C" void wmain() { HRESULT hr = S_OK; IStorage *pStg = NULL; IPropertyStorage *pPropStg = NULL; try { // Create an object with an IStorage interface. It is not // necessary that it be a system-provided storage, such as // that obtained by this call. Any object that implements // IStorage can be used. hr = StgCreateStorageEx( NULL, // Create a temporary storage. STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, STGFMT_STORAGE, 0, NULL, NULL, IID_IStorage, reinterpret_cast<void**>(&pStg) ); if( FAILED(hr) ) throw L"Failed StgCreateStorageEx"; // Get and use an IPropertySetStorage that represents this // IStorage. pPropStg = CreatePropertySetInStorage( pStg, FMTID_SummaryInformation ); if( NULL == pPropStg ) throw L"Failed CreatePropertySetInStorage"; // Here you could call IPropertyStorage methods, such as // WriteMultiple andReadMultiple, using the pPropStg pointer. printf( "Success\n" ); } catch( const WCHAR *pwszError ) { wprintf( L"Error: %s (%08x)\n", pwszError, hr ); } if( NULL != pPropStg ) pPropStg->Release(); if( NULL != pStg ) pStg->Release(); }
Show: