123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- /*
- * Copyright 2002 Ove Kaaven
- * Copyright 2004 Francois Gouget
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- import "objidl.idl";
- import "oaidl.idl";
- /******************** Property Storage ********************/
- interface IEnumSTATPROPSTG;
- interface IEnumSTATPROPSETSTG;
- [
- object,
- uuid(00000138-0000-0000-C000-000000000046),
- pointer_default(unique)
- ]
- interface IPropertyStorage : IUnknown
- {
- typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
- const DWORD PROPSETFLAG_DEFAULT = 0;
- const DWORD PROPSETFLAG_NONSIMPLE = 1;
- const DWORD PROPSETFLAG_ANSI = 2;
- const DWORD PROPSETFLAG_UNBUFFERED = 4;
- typedef struct tagPROPVARIANT PROPVARIANT;
- #define TYPEDEF_CA(type, name) \
- typedef struct tag##name { \
- ULONG cElems; \
- [size_is(cElems)] \
- type *pElems; \
- } name
- TYPEDEF_CA(unsigned char, CAUB);
- TYPEDEF_CA(short, CAI);
- TYPEDEF_CA(USHORT, CAUI);
- TYPEDEF_CA(long, CAL);
- TYPEDEF_CA(ULONG, CAUL);
- TYPEDEF_CA(float, CAFLT);
- TYPEDEF_CA(double, CADBL);
- TYPEDEF_CA(CY, CACY);
- TYPEDEF_CA(DATE, CADATE);
- TYPEDEF_CA(BSTR, CABSTR);
- TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
- TYPEDEF_CA(VARIANT_BOOL, CABOOL);
- TYPEDEF_CA(SCODE, CASCODE);
- TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
- TYPEDEF_CA(LARGE_INTEGER, CAH);
- TYPEDEF_CA(ULARGE_INTEGER, CAUH);
- TYPEDEF_CA(LPSTR, CALPSTR);
- TYPEDEF_CA(LPWSTR, CALPWSTR);
- TYPEDEF_CA(FILETIME, CAFILETIME);
- TYPEDEF_CA(CLIPDATA, CACLIPDATA);
- TYPEDEF_CA(CLSID, CACLSID);
- struct tagPROPVARIANT {
- VARTYPE vt;
- WORD wReserved1;
- WORD wReserved2;
- WORD wReserved3;
- [switch_is(vt & 0x1fff)] union {
- [case(VT_EMPTY, VT_NULL)] ;
- [case(VT_I1)] char cVal;
- [case(VT_UI1)] UCHAR bVal;
- [case(VT_I2)] short iVal;
- [case(VT_UI2)] USHORT uiVal;
- [case(VT_BOOL)] VARIANT_BOOL boolVal;
- #if 0 /* illegal in C++ */
- [case(VT_ILLEGAL)] _VARIANT_BOOL bool;
- #endif
- [case(VT_I4)] long lVal;
- [case(VT_UI4)] ULONG ulVal;
- [case(VT_R4)] float fltVal;
- [case(VT_ERROR)] SCODE scode;
- [case(VT_I8)] LARGE_INTEGER hVal;
- [case(VT_UI8)] ULARGE_INTEGER uhVal;
- [case(VT_R8)] double dblVal;
- [case(VT_CY)] CY cyVal;
- [case(VT_DATE)] DATE date;
- [case(VT_FILETIME)] FILETIME filetime;
- [case(VT_CLSID)] CLSID *puuid;
- [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob;
- [case(VT_CF)] CLIPDATA *pclipdata;
- [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;
- [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage;
- [case(VT_BSTR)] BSTR bstrVal;
- [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal;
- [case(VT_LPSTR)] LPSTR pszVal;
- [case(VT_LPWSTR)] LPWSTR pwszVal;
- [case(VT_UI1|VT_VECTOR)] CAUB caub;
- [case(VT_I2|VT_VECTOR)] CAI cai;
- [case(VT_UI2|VT_VECTOR)] CAUI caui;
- [case(VT_BOOL|VT_VECTOR)] CABOOL cabool;
- [case(VT_I4|VT_VECTOR)] CAL cal;
- [case(VT_UI4|VT_VECTOR)] CAUL caul;
- [case(VT_R4|VT_VECTOR)] CAFLT caflt;
- [case(VT_ERROR|VT_VECTOR)] CASCODE cascode;
- [case(VT_I8|VT_VECTOR)] CAH cah;
- [case(VT_UI8|VT_VECTOR)] CAUH cauh;
- [case(VT_R8|VT_VECTOR)] CADBL cadbl;
- [case(VT_CY|VT_VECTOR)] CACY cacy;
- [case(VT_DATE|VT_VECTOR)] CADATE cadate;
- [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime;
- [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid;
- [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata;
- [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr;
- [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob;
- [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr;
- [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr;
- [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar;
- };
- };
- typedef struct tagPROPVARIANT *LPPROPVARIANT;
- /* FIXME: bunches of property IDs */
- const ULONG PRSPEC_INVALID = 0xffffffff;
- const ULONG PRSPEC_LPWSTR = 0;
- const ULONG PRSPEC_PROPID = 1;
- typedef struct tagPROPSPEC {
- ULONG ulKind;
- [switch_is(ulKind)] union {
- [case(PRSPEC_PROPID)] PROPID propid;
- [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;
- [default] ;
- };
- } PROPSPEC;
- typedef struct tagSTATPROPSTG {
- LPOLESTR lpwstrName;
- PROPID propid;
- VARTYPE vt;
- } STATPROPSTG;
- /* FIXME: macros */
- typedef struct tagSTATPROPSETSTG {
- FMTID fmtid;
- CLSID clsid;
- DWORD grfFlags;
- FILETIME mtime;
- FILETIME ctime;
- FILETIME atime;
- DWORD dwOSVersion;
- } STATPROPSETSTG;
- HRESULT ReadMultiple(
- [in] ULONG cpspec,
- [in, size_is(cpspec)] const PROPSPEC rgpspec[],
- [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
- HRESULT WriteMultiple(
- [in] ULONG cpspec,
- [in, size_is(cpspec)] const PROPSPEC rgpspec[],
- [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
- [in] PROPID propidNameFirst);
- HRESULT DeleteMultiple(
- [in] ULONG cpspec,
- [in, size_is(cpspec)] const PROPSPEC rgpspec[]);
- HRESULT ReadPropertyNames(
- [in] ULONG cpropid,
- [in, size_is(cpropid)] const PROPID rgpropid[],
- [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);
- HRESULT WritePropertyNames(
- [in] ULONG cpropid,
- [in, size_is(cpropid)] const PROPID rgpropid[],
- [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);
- HRESULT DeletePropertyNames(
- [in] ULONG cpropid,
- [in, size_is(cpropid)] const PROPID rgpropid[]);
- HRESULT Commit(
- [in] DWORD grfCommitFlags);
- HRESULT Revert();
- HRESULT Enum(
- [out] IEnumSTATPROPSTG **ppenum);
- HRESULT SetTimes(
- [in] const FILETIME *pctime,
- [in] const FILETIME *patime,
- [in] const FILETIME *pmtime);
- HRESULT SetClass(
- [in] REFCLSID clsid);
- HRESULT Stat(
- [out] STATPROPSETSTG *statpsstg);
- }
- [
- object,
- uuid(0000013A-0000-0000-C000-000000000046),
- pointer_default(unique)
- ]
- interface IPropertySetStorage : IUnknown
- {
- typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;
- HRESULT Create(
- [in] REFFMTID rfmtid,
- [in, unique] const CLSID *pclsid,
- [in] DWORD grfFlags,
- [in] DWORD grfMode,
- [out] IPropertyStorage **ppprstg);
- HRESULT Open(
- [in] REFFMTID rfmtid,
- [in] DWORD grfMode,
- [out] IPropertyStorage **ppprstg);
- HRESULT Delete(
- [in] REFFMTID rfmtid);
- HRESULT Enum(
- [out] IEnumSTATPROPSETSTG **ppenum);
- }
- [
- object,
- uuid(00000139-0000-0000-C000-000000000046),
- pointer_default(unique)
- ]
- interface IEnumSTATPROPSTG : IUnknown
- {
- typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
- [local]
- HRESULT Next(
- [in] ULONG celt,
- [out, size_is(celt), length_is(*pceltFetched)]
- STATPROPSTG *rgelt,
- [out] ULONG *pceltFetched);
- [call_as(Next)]
- HRESULT RemoteNext(
- [in] ULONG celt,
- [out, size_is(celt), length_is(*pceltFetched)]
- STATPROPSTG *rgelt,
- [out] ULONG *pceltFetched);
- HRESULT Skip(
- [in] ULONG celt);
- HRESULT Reset();
- HRESULT Clone(
- [out] IEnumSTATPROPSTG **ppenum);
- }
- [
- object,
- uuid(0000013B-0000-0000-C000-000000000046),
- pointer_default(unique)
- ]
- interface IEnumSTATPROPSETSTG : IUnknown
- {
- typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
- [local]
- HRESULT Next(
- [in] ULONG celt,
- [out, size_is(celt), length_is(*pceltFetched)]
- STATPROPSETSTG *rgelt,
- [out] ULONG *pceltFetched);
- [call_as(Next)]
- HRESULT RemoteNext(
- [in] ULONG celt,
- [out, size_is(celt), length_is(*pceltFetched)]
- STATPROPSETSTG *rgelt,
- [out] ULONG *pceltFetched);
- HRESULT Skip(
- [in] ULONG celt);
- HRESULT Reset();
- HRESULT Clone(
- [out] IEnumSTATPROPSETSTG **ppenum);
- }
- cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);");
- cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);");
- cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);");
|