0% found this document useful (0 votes)
91 views3 pages

C++ Property Set Storage Example

This document defines the entry point for an application that demonstrates how to write and read property values to a property set storage. It opens a property set within a file, writes a string value to a property ID, closes and reopens the property set, then reads the property value back to validate it was written and stored correctly.

Uploaded by

Paul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views3 pages

C++ Property Set Storage Example

This document defines the entry point for an application that demonstrates how to write and read property values to a property set storage. It opens a property set within a file, writes a string value to a property ID, closes and reopens the property set, then reads the property value back to validate it was written and stored correctly.

Uploaded by

Paul
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

// SummaryPropPage.

cpp : Defines the entry point


// for the application.
//

#include "stdafx.h"

#include <stdio.h>
#include <windows.h>
#include <ole2.h>

// Implicitly link [Link]


#pragma comment( lib, "[Link]" )

const FMTID PropSetfmtid ={


/* F29F85E0-4FF9-1068-AB91-08002B27B3D9 */
0xf29f85e0,
0x4ff9,
0x1068,
{0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9 }
};

int APIENTRY WinMain(HINSTANCE hInstance,


HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.

IPropertySetStorage *pPropSetStg = NULL;


IPropertyStorage *pPropStg = NULL;
PROPSPEC propspec;
PROPVARIANT propWrite;
PROPVARIANT propRead;
HRESULT hr = S_OK;

// Open a file and a property set within it.


hr = StgOpenStorageEx( L"C:\\[Link]",
STGM_DIRECT|STGM_SHARE_EXCLUSIVE|
STGM_READWRITE,
STGFMT_ANY,
// STGFMT_STORAGE //Structured
//Storage property sets
// STGFMT_FILE //NTFS file system
//property sets
0,
NULL,
NULL,
IID_IPropertySetStorage,
reinterpret_cast<void**>(&pPropSetStg) );

if( FAILED(hr) )
throw L"Failed StgOpenStorageEx";

/*
hr = pPropSetStg->Open( PropSetfmtid,
STGM_WRITE|
STGM_SHARE_EXCLUSIVE,
&pPropStg );
*/

hr = pPropSetStg->Create( PropSetfmtid, NULL,


PROPSETFLAG_DEFAULT,
STGM_CREATE|STGM_READWRITE|
STGM_SHARE_EXCLUSIVE,
&pPropStg );

if( FAILED(hr) )
throw L"Failed IPropertySetStorage::Open";

//we can identify any property through its Name or its ID


// [Link] = PRSPEC_LPWSTR;
// [Link] = L"Title";

[Link] = PRSPEC_PROPID;
[Link] = 0x00000002;

//specify the value of property


[Link] = VT_LPWSTR;
[Link] = L"this value set through code";

hr = pPropStg->WriteMultiple( 1, &propspec,
&propWrite, PID_FIRST_USABLE );

if( FAILED(hr) )
throw L"Failed IPropertyStorage::WriteMultiple";

pPropStg->Release();
pPropStg = NULL;

//again open the property set

hr = pPropSetStg->Open( PropSetfmtid,
STGM_READ|STGM_SHARE_EXCLUSIVE,
&pPropStg );

if( FAILED(hr) )
throw L"Failed IPropertySetStorage::Open";

// Read the property back and validate it


hr = pPropStg->ReadMultiple( 1, &propspec, &propRead );
if( FAILED(hr) )
throw L"Failed IPropertyStorage::ReadMultiple";

char* str = new char [wcslen([Link]) + 1];


// the "%S" will implicitly convert UNICODE to ANSI.
wsprintfA ( str, "%S", [Link]);

//if you want to display


// MessageBox(NULL,str,"Reading Value",MB_OK);

if( hr == S_FALSE )
throw L"Property didn't exist after "
L"reopening the property set";
else if( [Link] != [Link] )
throw L"Property types didn't match "
L"after reopening the property set";
else if( wcscmp( [Link], [Link] ) != 0 )
throw L"Property values didn't match"
L" after reopening the property set";
else
wprintf( L"Success\n" );

return 0;
}

You might also like