Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple StgCreatePropSetStg.cpp montre comment la fonction StgCreatePropSetStg peut être utilisée pour créer une interface IPropertySetStorage en plus d’une interface IStorage donnée.
//+===================================================================
//
// 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();
}