Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

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();

}

Feedback

Was this page helpful?

Additional resources