Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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();
}