Exemple StgCreatePropSetStg
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();
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour