Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2035 lines
59 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (c) Microsoft Corporation. All rights reserved.
  5. //
  6. // File: oaidl.idl
  7. //
  8. //----------------------------------------------------------------------------
  9. cpp_quote("//+-------------------------------------------------------------------------")
  10. cpp_quote("//")
  11. cpp_quote("// Microsoft Windows")
  12. cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.")
  13. cpp_quote("//")
  14. cpp_quote("//--------------------------------------------------------------------------")
  15. cpp_quote("#if ( _MSC_VER >= 800 )")
  16. cpp_quote("#if _MSC_VER >= 1200")
  17. cpp_quote("#pragma warning(push)")
  18. cpp_quote("#endif")
  19. cpp_quote("#pragma warning(disable:4201) /* Nameless struct/union */")
  20. cpp_quote("#endif")
  21. cpp_quote("#if ( _MSC_VER >= 1020 )")
  22. cpp_quote("#pragma once")
  23. cpp_quote("#endif")
  24. #ifndef DO_NO_IMPORTS
  25. import "objidl.idl";
  26. #endif
  27. interface ICreateTypeInfo;
  28. interface ICreateTypeInfo2;
  29. interface ICreateTypeLib;
  30. interface ICreateTypeLib2;
  31. interface IDispatch;
  32. interface IEnumVARIANT;
  33. interface ITypeComp;
  34. interface ITypeInfo;
  35. interface ITypeInfo2;
  36. interface ITypeLib;
  37. interface ITypeLib2;
  38. interface ITypeChangeEvents;
  39. interface IErrorInfo;
  40. interface ICreateErrorInfo;
  41. interface ISupportErrorInfo;
  42. interface ITypeFactory;
  43. interface ITypeMarshal;
  44. interface IRecordInfo;
  45. [
  46. version(1.0), pointer_default(unique)
  47. ]
  48. interface IOleAutomationTypes
  49. {
  50. typedef CY CURRENCY;
  51. // #########################################################################
  52. // SAFEARRAY
  53. // #########################################################################
  54. typedef struct tagSAFEARRAYBOUND {
  55. ULONG cElements;
  56. LONG lLbound;
  57. } SAFEARRAYBOUND, * LPSAFEARRAYBOUND;
  58. cpp_quote("/* the following is what MIDL knows how to remote */")
  59. // Forward references.
  60. typedef [unique] struct _wireVARIANT * wireVARIANT;
  61. typedef [unique] struct _wireBRECORD * wireBRECORD;
  62. typedef struct _wireSAFEARR_BSTR {
  63. ULONG Size;
  64. [size_is(Size), ref] wireBSTR * aBstr;
  65. } SAFEARR_BSTR;
  66. typedef struct _wireSAFEARR_UNKNOWN {
  67. ULONG Size;
  68. [size_is(Size), ref] IUnknown ** apUnknown;
  69. } SAFEARR_UNKNOWN;
  70. typedef struct _wireSAFEARR_DISPATCH {
  71. ULONG Size;
  72. [size_is(Size), ref] IDispatch ** apDispatch;
  73. } SAFEARR_DISPATCH;
  74. typedef struct _wireSAFEARR_VARIANT {
  75. ULONG Size;
  76. [size_is(Size), ref] wireVARIANT * aVariant;
  77. } SAFEARR_VARIANT;
  78. typedef struct _wireSAFEARR_BRECORD {
  79. ULONG Size;
  80. [size_is(Size), ref] wireBRECORD * aRecord;
  81. } SAFEARR_BRECORD;
  82. typedef struct _wireSAFEARR_HAVEIID {
  83. ULONG Size;
  84. [size_is(Size), ref] IUnknown ** apUnknown;
  85. IID iid;
  86. } SAFEARR_HAVEIID;
  87. typedef [v1_enum] enum tagSF_TYPE {
  88. SF_ERROR = VT_ERROR,
  89. SF_I1 = VT_I1,
  90. SF_I2 = VT_I2,
  91. SF_I4 = VT_I4,
  92. SF_I8 = VT_I8,
  93. SF_BSTR = VT_BSTR,
  94. SF_UNKNOWN = VT_UNKNOWN,
  95. SF_DISPATCH = VT_DISPATCH,
  96. SF_VARIANT = VT_VARIANT,
  97. SF_RECORD = VT_RECORD,
  98. SF_HAVEIID = VT_UNKNOWN|VT_RESERVED,
  99. } SF_TYPE;
  100. typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
  101. case SF_BSTR: SAFEARR_BSTR BstrStr;
  102. case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr;
  103. case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
  104. case SF_VARIANT: SAFEARR_VARIANT VariantStr;
  105. case SF_RECORD: SAFEARR_BRECORD RecordStr;
  106. case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr;
  107. case SF_I1: BYTE_SIZEDARR ByteStr;
  108. case SF_I2: WORD_SIZEDARR WordStr;
  109. case SF_I4: DWORD_SIZEDARR LongStr;
  110. case SF_I8: HYPER_SIZEDARR HyperStr;
  111. } SAFEARRAYUNION;
  112. typedef [unique] struct _wireSAFEARRAY {
  113. USHORT cDims;
  114. USHORT fFeatures;
  115. ULONG cbElements;
  116. ULONG cLocks;
  117. SAFEARRAYUNION uArrayStructs;
  118. [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
  119. } * wireSAFEARRAY;
  120. typedef [unique] wireSAFEARRAY * wirePSAFEARRAY;
  121. typedef struct tagSAFEARRAY {
  122. USHORT cDims;
  123. USHORT fFeatures;
  124. ULONG cbElements;
  125. ULONG cLocks;
  126. PVOID pvData;
  127. SAFEARRAYBOUND rgsabound[];
  128. } SAFEARRAY;
  129. typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY * LPSAFEARRAY;
  130. const USHORT FADF_AUTO = 0x0001; /* array is allocated on the stack */
  131. const USHORT FADF_STATIC = 0x0002; /* array is staticly allocated */
  132. const USHORT FADF_EMBEDDED = 0x0004; /* array is embedded in a structure */
  133. const USHORT FADF_FIXEDSIZE = 0x0010; /* may not be resized or reallocated */
  134. const USHORT FADF_RECORD = 0x0020; /* an array of records */
  135. const USHORT FADF_HAVEIID = 0x0040; /* with FADF_DISPATCH, FADF_UNKNOWN */
  136. /* array has an IID for interfaces */
  137. const USHORT FADF_HAVEVARTYPE= 0x0080; /* array has a VT type */
  138. const USHORT FADF_BSTR = 0x0100; /* an array of BSTRs */
  139. const USHORT FADF_UNKNOWN = 0x0200; /* an array of IUnknown* */
  140. const USHORT FADF_DISPATCH = 0x0400; /* an array of IDispatch* */
  141. const USHORT FADF_VARIANT = 0x0800; /* an array of VARIANTs */
  142. const USHORT FADF_RESERVED = 0xF008; /* reserved bits */
  143. // #########################################################################
  144. // VARIANT
  145. // #########################################################################
  146. cpp_quote("/* VARIANT STRUCTURE")
  147. cpp_quote(" *")
  148. cpp_quote(" * VARTYPE vt;")
  149. cpp_quote(" * WORD wReserved1;")
  150. cpp_quote(" * WORD wReserved2;")
  151. cpp_quote(" * WORD wReserved3;")
  152. cpp_quote(" * union {")
  153. cpp_quote(" * LONGLONG VT_I8")
  154. cpp_quote(" * LONG VT_I4")
  155. cpp_quote(" * BYTE VT_UI1")
  156. cpp_quote(" * SHORT VT_I2")
  157. cpp_quote(" * FLOAT VT_R4")
  158. cpp_quote(" * DOUBLE VT_R8")
  159. cpp_quote(" * VARIANT_BOOL VT_BOOL")
  160. cpp_quote(" * SCODE VT_ERROR")
  161. cpp_quote(" * CY VT_CY")
  162. cpp_quote(" * DATE VT_DATE")
  163. cpp_quote(" * BSTR VT_BSTR")
  164. cpp_quote(" * IUnknown * VT_UNKNOWN")
  165. cpp_quote(" * IDispatch * VT_DISPATCH")
  166. cpp_quote(" * SAFEARRAY * VT_ARRAY")
  167. cpp_quote(" * BYTE * VT_BYREF|VT_UI1")
  168. cpp_quote(" * SHORT * VT_BYREF|VT_I2")
  169. cpp_quote(" * LONG * VT_BYREF|VT_I4")
  170. cpp_quote(" * LONGLONG * VT_BYREF|VT_I8")
  171. cpp_quote(" * FLOAT * VT_BYREF|VT_R4")
  172. cpp_quote(" * DOUBLE * VT_BYREF|VT_R8")
  173. cpp_quote(" * VARIANT_BOOL * VT_BYREF|VT_BOOL")
  174. cpp_quote(" * SCODE * VT_BYREF|VT_ERROR")
  175. cpp_quote(" * CY * VT_BYREF|VT_CY")
  176. cpp_quote(" * DATE * VT_BYREF|VT_DATE")
  177. cpp_quote(" * BSTR * VT_BYREF|VT_BSTR")
  178. cpp_quote(" * IUnknown ** VT_BYREF|VT_UNKNOWN")
  179. cpp_quote(" * IDispatch ** VT_BYREF|VT_DISPATCH")
  180. cpp_quote(" * SAFEARRAY ** VT_BYREF|VT_ARRAY")
  181. cpp_quote(" * VARIANT * VT_BYREF|VT_VARIANT")
  182. cpp_quote(" * PVOID VT_BYREF (Generic ByRef)")
  183. cpp_quote(" * CHAR VT_I1")
  184. cpp_quote(" * USHORT VT_UI2")
  185. cpp_quote(" * ULONG VT_UI4")
  186. cpp_quote(" * ULONGLONG VT_UI8")
  187. cpp_quote(" * INT VT_INT")
  188. cpp_quote(" * UINT VT_UINT")
  189. cpp_quote(" * DECIMAL * VT_BYREF|VT_DECIMAL")
  190. cpp_quote(" * CHAR * VT_BYREF|VT_I1")
  191. cpp_quote(" * USHORT * VT_BYREF|VT_UI2")
  192. cpp_quote(" * ULONG * VT_BYREF|VT_UI4")
  193. cpp_quote(" * ULONGLONG * VT_BYREF|VT_UI8")
  194. cpp_quote(" * INT * VT_BYREF|VT_INT")
  195. cpp_quote(" * UINT * VT_BYREF|VT_UINT")
  196. cpp_quote(" * }")
  197. cpp_quote(" */")
  198. cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
  199. cpp_quote("#define __VARIANT_NAME_1 n1")
  200. cpp_quote("#define __VARIANT_NAME_2 n2")
  201. cpp_quote("#define __VARIANT_NAME_3 n3")
  202. cpp_quote("#define __VARIANT_NAME_4 brecVal")
  203. cpp_quote("#else")
  204. cpp_quote("#define __tagVARIANT")
  205. cpp_quote("#define __VARIANT_NAME_1")
  206. cpp_quote("#define __VARIANT_NAME_2")
  207. cpp_quote("#define __VARIANT_NAME_3")
  208. cpp_quote("#define __tagBRECORD")
  209. cpp_quote("#define __VARIANT_NAME_4")
  210. cpp_quote("#endif")
  211. typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
  212. struct tagVARIANT {
  213. union {
  214. struct __tagVARIANT {
  215. VARTYPE vt;
  216. WORD wReserved1;
  217. WORD wReserved2;
  218. WORD wReserved3;
  219. union {
  220. LONGLONG llVal; /* VT_I8 */
  221. LONG lVal; /* VT_I4 */
  222. BYTE bVal; /* VT_UI1 */
  223. SHORT iVal; /* VT_I2 */
  224. FLOAT fltVal; /* VT_R4 */
  225. DOUBLE dblVal; /* VT_R8 */
  226. VARIANT_BOOL boolVal; /* VT_BOOL */
  227. _VARIANT_BOOL bool; /* (obsolete) */
  228. SCODE scode; /* VT_ERROR */
  229. CY cyVal; /* VT_CY */
  230. DATE date; /* VT_DATE */
  231. BSTR bstrVal; /* VT_BSTR */
  232. IUnknown * punkVal; /* VT_UNKNOWN */
  233. IDispatch * pdispVal; /* VT_DISPATCH */
  234. SAFEARRAY * parray; /* VT_ARRAY */
  235. BYTE * pbVal; /* VT_BYREF|VT_UI1 */
  236. SHORT * piVal; /* VT_BYREF|VT_I2 */
  237. LONG * plVal; /* VT_BYREF|VT_I4 */
  238. LONGLONG * pllVal; /* VT_BYREF|VT_I8 */
  239. FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
  240. DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
  241. VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
  242. _VARIANT_BOOL *pbool; /* (obsolete) */
  243. SCODE * pscode; /* VT_BYREF|VT_ERROR */
  244. CY * pcyVal; /* VT_BYREF|VT_CY */
  245. DATE * pdate; /* VT_BYREF|VT_DATE */
  246. BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
  247. IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
  248. IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
  249. SAFEARRAY ** pparray; /* VT_BYREF|VT_ARRAY */
  250. VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
  251. PVOID byref; /* Generic ByRef */
  252. CHAR cVal; /* VT_I1 */
  253. USHORT uiVal; /* VT_UI2 */
  254. ULONG ulVal; /* VT_UI4 */
  255. ULONGLONG ullVal; /* VT_UI8 */
  256. INT intVal; /* VT_INT */
  257. UINT uintVal; /* VT_UINT */
  258. DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
  259. CHAR * pcVal; /* VT_BYREF|VT_I1 */
  260. USHORT * puiVal; /* VT_BYREF|VT_UI2 */
  261. ULONG * pulVal; /* VT_BYREF|VT_UI4 */
  262. ULONGLONG * pullVal; /* VT_BYREF|VT_UI8 */
  263. INT * pintVal; /* VT_BYREF|VT_INT */
  264. UINT * puintVal; /* VT_BYREF|VT_UINT */
  265. struct __tagBRECORD {
  266. PVOID pvRecord;
  267. IRecordInfo * pRecInfo;
  268. } __VARIANT_NAME_4; /* VT_RECORD */
  269. } __VARIANT_NAME_3;
  270. } __VARIANT_NAME_2;
  271. DECIMAL decVal;
  272. } __VARIANT_NAME_1;
  273. };
  274. typedef VARIANT * LPVARIANT;
  275. typedef VARIANT VARIANTARG;
  276. typedef VARIANT * LPVARIANTARG;
  277. cpp_quote("/* the following is what MIDL knows how to remote */")
  278. struct _wireBRECORD {
  279. ULONG fFlags;
  280. ULONG clSize;
  281. IRecordInfo * pRecInfo;
  282. [size_is(clSize)] byte * pRecord;
  283. };
  284. struct _wireVARIANT {
  285. DWORD clSize; /* wire buffer length in units of hyper (int64) */
  286. DWORD rpcReserved; /* for future use */
  287. USHORT vt;
  288. USHORT wReserved1;
  289. USHORT wReserved2;
  290. USHORT wReserved3;
  291. [switch_type(ULONG), switch_is(vt)] union {
  292. [case(VT_I8)] LONGLONG llVal; /* VT_I8 */
  293. [case(VT_I4)] LONG lVal; /* VT_I4 */
  294. [case(VT_UI1)] BYTE bVal; /* VT_UI1 */
  295. [case(VT_I2)] SHORT iVal; /* VT_I2 */
  296. [case(VT_R4)] FLOAT fltVal; /* VT_R4 */
  297. [case(VT_R8)] DOUBLE dblVal; /* VT_R8 */
  298. [case(VT_BOOL)] VARIANT_BOOL boolVal; /* VT_BOOL */
  299. [case(VT_ERROR)] SCODE scode; /* VT_ERROR */
  300. [case(VT_CY)] CY cyVal; /* VT_CY */
  301. [case(VT_DATE)] DATE date; /* VT_DATE */
  302. [case(VT_BSTR)] wireBSTR bstrVal; /* VT_BSTR */
  303. [case(VT_UNKNOWN)] IUnknown * punkVal; /* VT_UNKNOWN */
  304. [case(VT_DISPATCH)] IDispatch * pdispVal; /* VT_DISPATCH */
  305. [case(VT_ARRAY)] wirePSAFEARRAY parray; /* VT_ARRAY */
  306. [case(VT_RECORD, VT_RECORD|VT_BYREF)]
  307. wireBRECORD brecVal; /* VT_RECORD */
  308. [case(VT_UI1|VT_BYREF)]
  309. BYTE * pbVal; /* VT_BYREF|VT_UI1 */
  310. [case(VT_I2|VT_BYREF)]
  311. SHORT * piVal; /* VT_BYREF|VT_I2 */
  312. [case(VT_I4|VT_BYREF)]
  313. LONG * plVal; /* VT_BYREF|VT_I4 */
  314. [case(VT_I8|VT_BYREF)]
  315. LONGLONG * pllVal; /* VT_BYREF|VT_I8 */
  316. [case(VT_R4|VT_BYREF)]
  317. FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
  318. [case(VT_R8|VT_BYREF)]
  319. DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
  320. [case(VT_BOOL|VT_BYREF)]
  321. VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
  322. [case(VT_ERROR|VT_BYREF)]
  323. SCODE * pscode; /* VT_BYREF|VT_ERROR */
  324. [case(VT_CY|VT_BYREF)]
  325. CY * pcyVal; /* VT_BYREF|VT_CY */
  326. [case(VT_DATE|VT_BYREF)]
  327. DATE * pdate; /* VT_BYREF|VT_DATE */
  328. [case(VT_BSTR|VT_BYREF)]
  329. wireBSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
  330. [case(VT_UNKNOWN|VT_BYREF)]
  331. IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
  332. [case(VT_DISPATCH|VT_BYREF)]
  333. IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
  334. [case(VT_ARRAY|VT_BYREF)]
  335. wirePSAFEARRAY *pparray; /* VT_BYREF|VT_ARRAY */
  336. [case(VT_VARIANT|VT_BYREF)]
  337. wireVARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
  338. [case(VT_I1)] CHAR cVal; /* VT_I1 */
  339. [case(VT_UI2)] USHORT uiVal; /* VT_UI2 */
  340. [case(VT_UI4)] ULONG ulVal; /* VT_UI4 */
  341. [case(VT_UI8)] ULONGLONG ullVal; /* VT_UI8 */
  342. [case(VT_INT)] INT intVal; /* VT_INT */
  343. [case(VT_UINT)] UINT uintVal; /* VT_UINT */
  344. [case(VT_DECIMAL)] DECIMAL decVal; /* VT_DECIMAL */
  345. [case(VT_BYREF|VT_DECIMAL)]
  346. DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
  347. [case(VT_BYREF|VT_I1)]
  348. CHAR * pcVal; /* VT_BYREF|VT_I1 */
  349. [case(VT_BYREF|VT_UI2)]
  350. USHORT * puiVal; /* VT_BYREF|VT_UI2 */
  351. [case(VT_BYREF|VT_UI4)]
  352. ULONG * pulVal; /* VT_BYREF|VT_UI4 */
  353. [case(VT_BYREF|VT_UI8)]
  354. ULONGLONG * pullVal; /* VT_BYREF|VT_UI8 */
  355. [case(VT_BYREF|VT_INT)]
  356. INT * pintVal; /* VT_BYREF|VT_INT */
  357. [case(VT_BYREF|VT_UINT)]
  358. UINT * puintVal; /* VT_BYREF|VT_UINT */
  359. [case(VT_EMPTY)] ; /* nothing */
  360. [case(VT_NULL)] ; /* nothing */
  361. };
  362. };
  363. //########################################################################
  364. // End of VARIANT & SAFEARRAY
  365. //########################################################################
  366. //TypeInfo stuff.
  367. typedef LONG DISPID;
  368. typedef DISPID MEMBERID;
  369. typedef DWORD HREFTYPE;
  370. typedef [v1_enum] enum tagTYPEKIND {
  371. TKIND_ENUM = 0,
  372. TKIND_RECORD,
  373. TKIND_MODULE,
  374. TKIND_INTERFACE,
  375. TKIND_DISPATCH,
  376. TKIND_COCLASS,
  377. TKIND_ALIAS,
  378. TKIND_UNION,
  379. TKIND_MAX /* end of enum marker */
  380. } TYPEKIND;
  381. typedef struct tagTYPEDESC {
  382. [switch_type(VARTYPE), switch_is(vt)] union {
  383. [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC * lptdesc;
  384. [case(VT_CARRAY)] struct tagARRAYDESC * lpadesc;
  385. [case(VT_USERDEFINED)] HREFTYPE hreftype;
  386. [default] ;
  387. };
  388. VARTYPE vt;
  389. } TYPEDESC;
  390. typedef struct tagARRAYDESC {
  391. TYPEDESC tdescElem; /* element type */
  392. USHORT cDims; /* dimension count */
  393. [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; /* var len array of bounds */
  394. } ARRAYDESC;
  395. // parameter description
  396. typedef struct tagPARAMDESCEX {
  397. ULONG cBytes; /* size of this structure */
  398. VARIANTARG varDefaultValue; /* default value of this parameter */
  399. } PARAMDESCEX, * LPPARAMDESCEX;
  400. typedef struct tagPARAMDESC {
  401. LPPARAMDESCEX pparamdescex; /* valid if PARAMFLAG_FHASDEFAULT bit is set */
  402. USHORT wParamFlags; /* IN, OUT, etc */
  403. } PARAMDESC, * LPPARAMDESC;
  404. const USHORT PARAMFLAG_NONE = 0x00;
  405. const USHORT PARAMFLAG_FIN = 0x01;
  406. const USHORT PARAMFLAG_FOUT = 0x02;
  407. const USHORT PARAMFLAG_FLCID = 0x04;
  408. const USHORT PARAMFLAG_FRETVAL = 0x08;
  409. const USHORT PARAMFLAG_FOPT = 0x10;
  410. const USHORT PARAMFLAG_FHASDEFAULT = 0x20;
  411. const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
  412. typedef struct tagIDLDESC {
  413. ULONG_PTR dwReserved;
  414. USHORT wIDLFlags; /* IN, OUT, etc */
  415. } IDLDESC, * LPIDLDESC;
  416. const USHORT IDLFLAG_NONE = PARAMFLAG_NONE;
  417. const USHORT IDLFLAG_FIN = PARAMFLAG_FIN;
  418. const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT;
  419. const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID;
  420. const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
  421. cpp_quote("//;begin_internal")
  422. cpp_quote("#if 0")
  423. cpp_quote("/* the following is what MIDL knows how to remote */")
  424. typedef struct tagELEMDESC { /* a format that MIDL likes */
  425. TYPEDESC tdesc; /* the type of the element */
  426. PARAMDESC paramdesc; /* IDLDESC is a subset of PARAMDESC */
  427. } ELEMDESC;
  428. cpp_quote("#else /* 0 */")
  429. cpp_quote("//;end_internal")
  430. cpp_quote("typedef struct tagELEMDESC {")
  431. cpp_quote(" TYPEDESC tdesc; /* the type of the element */")
  432. cpp_quote(" union {")
  433. cpp_quote(" IDLDESC idldesc; /* info for remoting the element */")
  434. cpp_quote(" PARAMDESC paramdesc; /* info about the parameter */")
  435. cpp_quote(" };")
  436. cpp_quote("} ELEMDESC, * LPELEMDESC;")
  437. cpp_quote("//;begin_internal")
  438. cpp_quote("#endif /* 0 */")
  439. cpp_quote("//;end_internal")
  440. typedef struct tagTYPEATTR {
  441. GUID guid; /* the GUID of the TypeInfo */
  442. LCID lcid; /* locale of member names and doc strings */
  443. DWORD dwReserved;
  444. MEMBERID memidConstructor; /* ID of constructor, MEMBERID_NIL if none */
  445. MEMBERID memidDestructor; /* ID of destructor, MEMBERID_NIL if none */
  446. LPOLESTR lpstrSchema;
  447. ULONG cbSizeInstance; /* the size of an instance of this type */
  448. TYPEKIND typekind; /* the kind of type this typeinfo describes */
  449. WORD cFuncs; /* number of functions */
  450. WORD cVars; /* number of variables / data members */
  451. WORD cImplTypes; /* number of implemented interfaces */
  452. WORD cbSizeVft; /* the size of this types virtual func table */
  453. WORD cbAlignment; /* specifies the alignment requirements for
  454. an instance of this type,
  455. 0 = align on 64k boundary
  456. 1 = byte align
  457. 2 = word align
  458. 4 = dword align... */
  459. WORD wTypeFlags;
  460. WORD wMajorVerNum; /* major version number */
  461. WORD wMinorVerNum; /* minor version number */
  462. TYPEDESC tdescAlias; /* if typekind == TKIND_ALIAS this field
  463. specifies the type for which this type
  464. is an alias */
  465. IDLDESC idldescType; /* IDL attributes of the described type */
  466. } TYPEATTR, * LPTYPEATTR;
  467. typedef struct tagDISPPARAMS {
  468. [size_is(cArgs)] VARIANTARG * rgvarg;
  469. [size_is(cNamedArgs)] DISPID * rgdispidNamedArgs;
  470. UINT cArgs;
  471. UINT cNamedArgs;
  472. } DISPPARAMS;
  473. cpp_quote("//;begin_internal")
  474. cpp_quote("#if 0")
  475. cpp_quote("/* the following is what MIDL knows how to remote */")
  476. midl_pragma warning( disable: 2395) // polymorphic types not supported in the TLB
  477. typedef struct tagEXCEPINFO {
  478. WORD wCode; /* An error code describing the error. */
  479. WORD wReserved;
  480. BSTR bstrSource; /* A source of the exception */
  481. BSTR bstrDescription; /* A description of the error */
  482. BSTR bstrHelpFile; /* Fully qualified drive, path, and file name */
  483. DWORD dwHelpContext; /* help context of topic within the help file */
  484. // We can use ULONG_PTR here, because EXCEPINFO is marshalled by RPC
  485. // RPC will marshal pfnDeferredFillIn.
  486. ULONG_PTR pvReserved;
  487. ULONG_PTR pfnDeferredFillIn;
  488. SCODE scode;
  489. } EXCEPINFO;
  490. cpp_quote("#else /* 0 */")
  491. cpp_quote("//;end_internal")
  492. cpp_quote("typedef struct tagEXCEPINFO {")
  493. cpp_quote(" WORD wCode;")
  494. cpp_quote(" WORD wReserved;")
  495. cpp_quote(" BSTR bstrSource;")
  496. cpp_quote(" BSTR bstrDescription;")
  497. cpp_quote(" BSTR bstrHelpFile;")
  498. cpp_quote(" DWORD dwHelpContext;")
  499. cpp_quote(" PVOID pvReserved;")
  500. cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
  501. cpp_quote(" SCODE scode;")
  502. cpp_quote("} EXCEPINFO, * LPEXCEPINFO;")
  503. cpp_quote("//;begin_internal")
  504. cpp_quote("#endif /* 0 */")
  505. cpp_quote("//;end_internal")
  506. typedef [v1_enum] enum tagCALLCONV {
  507. CC_FASTCALL = 0,
  508. CC_CDECL = 1,
  509. CC_MSCPASCAL,
  510. CC_PASCAL = CC_MSCPASCAL,
  511. CC_MACPASCAL,
  512. CC_STDCALL,
  513. CC_FPFASTCALL,
  514. CC_SYSCALL,
  515. CC_MPWCDECL,
  516. CC_MPWPASCAL,
  517. CC_MAX /* end of enum marker */
  518. } CALLCONV;
  519. typedef [v1_enum] enum tagFUNCKIND {
  520. FUNC_VIRTUAL,
  521. FUNC_PUREVIRTUAL,
  522. FUNC_NONVIRTUAL,
  523. FUNC_STATIC,
  524. FUNC_DISPATCH
  525. } FUNCKIND;
  526. typedef [v1_enum] enum tagINVOKEKIND {
  527. INVOKE_FUNC = 1,
  528. INVOKE_PROPERTYGET = 2,
  529. INVOKE_PROPERTYPUT = 4,
  530. INVOKE_PROPERTYPUTREF = 8
  531. } INVOKEKIND;
  532. typedef struct tagFUNCDESC {
  533. MEMBERID memid;
  534. [size_is(cScodes)] SCODE * lprgscode;
  535. [size_is(cParams)] ELEMDESC * lprgelemdescParam; /* array of param types */
  536. FUNCKIND funckind;
  537. INVOKEKIND invkind;
  538. CALLCONV callconv;
  539. SHORT cParams;
  540. SHORT cParamsOpt;
  541. SHORT oVft;
  542. SHORT cScodes;
  543. ELEMDESC elemdescFunc;
  544. WORD wFuncFlags;
  545. } FUNCDESC, * LPFUNCDESC;
  546. typedef [v1_enum] enum tagVARKIND {
  547. VAR_PERINSTANCE,
  548. VAR_STATIC,
  549. VAR_CONST,
  550. VAR_DISPATCH
  551. } VARKIND;
  552. /* IMPLTYPE Flags */
  553. const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1;
  554. const USHORT IMPLTYPEFLAG_FSOURCE = 0x2;
  555. const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4;
  556. const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE= 0x8;
  557. typedef struct tagVARDESC {
  558. MEMBERID memid;
  559. LPOLESTR lpstrSchema;
  560. [switch_type(VARKIND), switch_is(varkind)] union {
  561. /* offset of variable within the instance */
  562. [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
  563. [case(VAR_CONST)] VARIANT * lpvarValue; /* the value of the constant */
  564. };
  565. ELEMDESC elemdescVar;
  566. WORD wVarFlags;
  567. VARKIND varkind;
  568. } VARDESC, * LPVARDESC;
  569. typedef enum tagTYPEFLAGS {
  570. TYPEFLAG_FAPPOBJECT = 0x01,
  571. TYPEFLAG_FCANCREATE = 0x02,
  572. TYPEFLAG_FLICENSED = 0x04,
  573. TYPEFLAG_FPREDECLID = 0x08,
  574. TYPEFLAG_FHIDDEN = 0x10,
  575. TYPEFLAG_FCONTROL = 0x20,
  576. TYPEFLAG_FDUAL = 0x40,
  577. TYPEFLAG_FNONEXTENSIBLE = 0x80,
  578. TYPEFLAG_FOLEAUTOMATION = 0x100,
  579. TYPEFLAG_FRESTRICTED = 0x200,
  580. TYPEFLAG_FAGGREGATABLE = 0x400,
  581. TYPEFLAG_FREPLACEABLE = 0x800,
  582. TYPEFLAG_FDISPATCHABLE = 0x1000,
  583. TYPEFLAG_FREVERSEBIND = 0x2000,
  584. TYPEFLAG_FPROXY = 0x4000
  585. } TYPEFLAGS;
  586. typedef enum tagFUNCFLAGS {
  587. FUNCFLAG_FRESTRICTED = 0x1,
  588. FUNCFLAG_FSOURCE = 0x2,
  589. FUNCFLAG_FBINDABLE = 0x4,
  590. FUNCFLAG_FREQUESTEDIT = 0x8,
  591. FUNCFLAG_FDISPLAYBIND = 0x10,
  592. FUNCFLAG_FDEFAULTBIND = 0x20,
  593. FUNCFLAG_FHIDDEN = 0x40,
  594. FUNCFLAG_FUSESGETLASTERROR = 0x80,
  595. FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
  596. FUNCFLAG_FUIDEFAULT = 0x200,
  597. FUNCFLAG_FNONBROWSABLE = 0x400,
  598. FUNCFLAG_FREPLACEABLE = 0x800,
  599. FUNCFLAG_FIMMEDIATEBIND = 0x1000
  600. } FUNCFLAGS;
  601. typedef enum tagVARFLAGS {
  602. VARFLAG_FREADONLY = 0x1,
  603. VARFLAG_FSOURCE = 0x2,
  604. VARFLAG_FBINDABLE = 0x4,
  605. VARFLAG_FREQUESTEDIT = 0x8,
  606. VARFLAG_FDISPLAYBIND = 0x10,
  607. VARFLAG_FDEFAULTBIND = 0x20,
  608. VARFLAG_FHIDDEN = 0x40,
  609. VARFLAG_FRESTRICTED = 0x80,
  610. VARFLAG_FDEFAULTCOLLELEM = 0x100,
  611. VARFLAG_FUIDEFAULT = 0x200,
  612. VARFLAG_FNONBROWSABLE = 0x400,
  613. VARFLAG_FREPLACEABLE = 0x800,
  614. VARFLAG_FIMMEDIATEBIND = 0x1000
  615. } VARFLAGS;
  616. typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
  617. IUnknown * pInterface; /* interface that is responsible for storage */
  618. PVOID pStorage; /* the storage being managed by interface */
  619. DWORD flags; /* which interface, what storage */
  620. } CLEANLOCALSTORAGE;
  621. typedef struct tagCUSTDATAITEM {
  622. GUID guid; /* guid identifying this custom data item */
  623. VARIANTARG varValue; /* value of this custom data item */
  624. } CUSTDATAITEM, * LPCUSTDATAITEM;
  625. typedef struct tagCUSTDATA {
  626. DWORD cCustData; /* number of custom data items in rgCustData */
  627. [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
  628. /* array of custom data items */
  629. } CUSTDATA, * LPCUSTDATA;
  630. }
  631. [
  632. object,
  633. uuid(00020405-0000-0000-C000-000000000046),
  634. pointer_default(unique),
  635. local
  636. ]
  637. interface ICreateTypeInfo: IUnknown
  638. {
  639. typedef [unique] ICreateTypeInfo * LPCREATETYPEINFO;
  640. HRESULT SetGuid(
  641. [in] REFGUID guid
  642. );
  643. HRESULT SetTypeFlags(
  644. [in] UINT uTypeFlags
  645. );
  646. HRESULT SetDocString(
  647. [in] LPOLESTR pStrDoc
  648. );
  649. HRESULT SetHelpContext(
  650. [in] DWORD dwHelpContext
  651. );
  652. HRESULT SetVersion(
  653. [in] WORD wMajorVerNum,
  654. [in] WORD wMinorVerNum
  655. );
  656. HRESULT AddRefTypeInfo(
  657. [in] ITypeInfo * pTInfo,
  658. [in] HREFTYPE * phRefType
  659. );
  660. HRESULT AddFuncDesc(
  661. [in] UINT index,
  662. [in] FUNCDESC * pFuncDesc
  663. );
  664. HRESULT AddImplType(
  665. [in] UINT index,
  666. [in] HREFTYPE hRefType
  667. );
  668. HRESULT SetImplTypeFlags(
  669. [in] UINT index,
  670. [in] INT implTypeFlags
  671. );
  672. HRESULT SetAlignment(
  673. [in] WORD cbAlignment
  674. );
  675. HRESULT SetSchema(
  676. [in] LPOLESTR pStrSchema
  677. );
  678. HRESULT AddVarDesc(
  679. [in] UINT index,
  680. [in] VARDESC * pVarDesc
  681. );
  682. HRESULT SetFuncAndParamNames(
  683. [in] UINT index,
  684. [in, size_is((UINT) cNames)]
  685. [in] LPOLESTR * rgszNames,
  686. [in] UINT cNames
  687. );
  688. HRESULT SetVarName(
  689. [in] UINT index,
  690. [in] LPOLESTR szName
  691. );
  692. HRESULT SetTypeDescAlias(
  693. [in] TYPEDESC * pTDescAlias
  694. );
  695. HRESULT DefineFuncAsDllEntry(
  696. [in] UINT index,
  697. [in] LPOLESTR szDllName,
  698. [in] LPOLESTR szProcName
  699. );
  700. HRESULT SetFuncDocString(
  701. [in] UINT index,
  702. [in] LPOLESTR szDocString
  703. );
  704. HRESULT SetVarDocString(
  705. [in] UINT index,
  706. [in] LPOLESTR szDocString
  707. );
  708. HRESULT SetFuncHelpContext(
  709. [in] UINT index,
  710. [in] DWORD dwHelpContext
  711. );
  712. HRESULT SetVarHelpContext(
  713. [in] UINT index,
  714. [in] DWORD dwHelpContext
  715. );
  716. HRESULT SetMops(
  717. [in] UINT index,
  718. [in] BSTR bstrMops
  719. );
  720. HRESULT SetTypeIdldesc(
  721. [in] IDLDESC * pIdlDesc
  722. );
  723. HRESULT LayOut(
  724. void
  725. );
  726. }
  727. [
  728. object,
  729. uuid(0002040E-0000-0000-C000-000000000046),
  730. pointer_default(unique),
  731. local
  732. ]
  733. interface ICreateTypeInfo2: ICreateTypeInfo
  734. {
  735. typedef [unique] ICreateTypeInfo2 * LPCREATETYPEINFO2;
  736. HRESULT DeleteFuncDesc(
  737. [in] UINT index
  738. );
  739. HRESULT DeleteFuncDescByMemId(
  740. [in] MEMBERID memid,
  741. [in] INVOKEKIND invKind
  742. );
  743. HRESULT DeleteVarDesc(
  744. [in] UINT index
  745. );
  746. HRESULT DeleteVarDescByMemId(
  747. [in] MEMBERID memid
  748. );
  749. HRESULT DeleteImplType(
  750. [in] UINT index
  751. );
  752. HRESULT SetCustData(
  753. [in] REFGUID guid,
  754. [in] VARIANT * pVarVal
  755. );
  756. HRESULT SetFuncCustData(
  757. [in] UINT index,
  758. [in] REFGUID guid,
  759. [in] VARIANT * pVarVal
  760. );
  761. HRESULT SetParamCustData(
  762. [in] UINT indexFunc,
  763. [in] UINT indexParam,
  764. [in] REFGUID guid,
  765. [in] VARIANT * pVarVal
  766. );
  767. HRESULT SetVarCustData(
  768. [in] UINT index,
  769. [in] REFGUID guid,
  770. [in] VARIANT * pVarVal
  771. );
  772. HRESULT SetImplTypeCustData(
  773. [in] UINT index,
  774. [in] REFGUID guid,
  775. [in] VARIANT * pVarVal
  776. );
  777. HRESULT SetHelpStringContext(
  778. [in] ULONG dwHelpStringContext
  779. );
  780. HRESULT SetFuncHelpStringContext(
  781. [in] UINT index,
  782. [in] ULONG dwHelpStringContext
  783. );
  784. HRESULT SetVarHelpStringContext(
  785. [in] UINT index,
  786. [in] ULONG dwHelpStringContext
  787. );
  788. HRESULT Invalidate(
  789. void
  790. );
  791. HRESULT SetName(
  792. [in] LPOLESTR szName
  793. );
  794. }
  795. [
  796. object,
  797. uuid(00020406-0000-0000-C000-000000000046),
  798. pointer_default(unique),
  799. local
  800. ]
  801. interface ICreateTypeLib : IUnknown
  802. {
  803. typedef [unique] ICreateTypeLib * LPCREATETYPELIB;
  804. HRESULT CreateTypeInfo(
  805. [in] LPOLESTR szName,
  806. [in] TYPEKIND tkind,
  807. [out] ICreateTypeInfo ** ppCTInfo
  808. );
  809. HRESULT SetName(
  810. [in] LPOLESTR szName
  811. );
  812. HRESULT SetVersion(
  813. [in] WORD wMajorVerNum,
  814. [in] WORD wMinorVerNum
  815. );
  816. HRESULT SetGuid(
  817. [in] REFGUID guid
  818. );
  819. HRESULT SetDocString(
  820. [in] LPOLESTR szDoc
  821. );
  822. HRESULT SetHelpFileName(
  823. [in] LPOLESTR szHelpFileName
  824. );
  825. HRESULT SetHelpContext(
  826. [in] DWORD dwHelpContext
  827. );
  828. HRESULT SetLcid(
  829. [in] LCID lcid
  830. );
  831. HRESULT SetLibFlags(
  832. [in] UINT uLibFlags
  833. );
  834. HRESULT SaveAllChanges(
  835. void
  836. );
  837. }
  838. [
  839. object,
  840. uuid(0002040F-0000-0000-C000-000000000046),
  841. pointer_default(unique),
  842. local
  843. ]
  844. interface ICreateTypeLib2 : ICreateTypeLib
  845. {
  846. typedef [unique] ICreateTypeLib2 * LPCREATETYPELIB2;
  847. HRESULT DeleteTypeInfo(
  848. [in] LPOLESTR szName
  849. );
  850. HRESULT SetCustData(
  851. [in] REFGUID guid,
  852. [in] VARIANT * pVarVal
  853. );
  854. HRESULT SetHelpStringContext(
  855. [in] ULONG dwHelpStringContext
  856. );
  857. HRESULT SetHelpStringDll(
  858. [in] LPOLESTR szFileName
  859. );
  860. }
  861. [
  862. object,
  863. uuid(00020400-0000-0000-C000-000000000046),
  864. pointer_default(unique)
  865. ]
  866. interface IDispatch : IUnknown
  867. {
  868. typedef [unique] IDispatch * LPDISPATCH;
  869. HRESULT GetTypeInfoCount(
  870. [out] UINT * pctinfo
  871. );
  872. HRESULT GetTypeInfo(
  873. [in] UINT iTInfo,
  874. [in] LCID lcid,
  875. [out] ITypeInfo ** ppTInfo
  876. );
  877. HRESULT GetIDsOfNames(
  878. [in] REFIID riid,
  879. [in, size_is(cNames)] LPOLESTR * rgszNames,
  880. [in] UINT cNames,
  881. [in] LCID lcid,
  882. [out, size_is(cNames)] DISPID * rgDispId
  883. );
  884. [local]
  885. HRESULT Invoke(
  886. [in] DISPID dispIdMember,
  887. [in] REFIID riid,
  888. [in] LCID lcid,
  889. [in] WORD wFlags,
  890. [in, out] DISPPARAMS * pDispParams,
  891. [out] VARIANT * pVarResult,
  892. [out] EXCEPINFO * pExcepInfo,
  893. [out] UINT * puArgErr
  894. );
  895. [call_as(Invoke)]
  896. HRESULT RemoteInvoke(
  897. [in] DISPID dispIdMember,
  898. [in] REFIID riid,
  899. [in] LCID lcid,
  900. [in] DWORD dwFlags,
  901. [in] DISPPARAMS * pDispParams,
  902. [out] VARIANT * pVarResult,
  903. [out] EXCEPINFO * pExcepInfo,
  904. [out] UINT * pArgErr,
  905. [in] UINT cVarRef,
  906. [in, size_is(cVarRef)] UINT * rgVarRefIdx,
  907. [in, out, size_is(cVarRef)] VARIANTARG * rgVarRef
  908. );
  909. cpp_quote("/* DISPID reserved to indicate an \"unknown\" name */")
  910. cpp_quote("/* only reserved for data members (properties); reused as a method dispid below */")
  911. const DISPID DISPID_UNKNOWN = -1;
  912. cpp_quote("/* DISPID reserved for the \"value\" property */")
  913. const DISPID DISPID_VALUE = 0;
  914. cpp_quote("/* The following DISPID is reserved to indicate the param")
  915. cpp_quote(" * that is the right-hand-side (or \"put\" value) of a PropertyPut")
  916. cpp_quote(" */")
  917. const DISPID DISPID_PROPERTYPUT = -3;
  918. cpp_quote("/* DISPID reserved for the standard \"NewEnum\" method */")
  919. const DISPID DISPID_NEWENUM = -4;
  920. cpp_quote("/* DISPID reserved for the standard \"Evaluate\" method */")
  921. const DISPID DISPID_EVALUATE = -5;
  922. const DISPID DISPID_CONSTRUCTOR = -6;
  923. const DISPID DISPID_DESTRUCTOR = -7;
  924. const DISPID DISPID_COLLECT = -8;
  925. cpp_quote("/* The range -500 through -999 is reserved for Controls */")
  926. cpp_quote("/* The range 0x80010000 through 0x8001FFFF is reserved for Controls */")
  927. cpp_quote("/* The range -5000 through -5499 is reserved for ActiveX Accessability */")
  928. cpp_quote("/* The range -2000 through -2499 is reserved for VB5 */")
  929. cpp_quote("/* The range -3900 through -3999 is reserved for Forms */")
  930. cpp_quote("/* The range -5500 through -5550 is reserved for Forms */")
  931. cpp_quote("/* The remainder of the negative DISPIDs are reserved for future use */")
  932. }
  933. [
  934. object,
  935. uuid(00020404-0000-0000-C000-000000000046),
  936. pointer_default(unique)
  937. ]
  938. interface IEnumVARIANT : IUnknown
  939. {
  940. typedef [unique] IEnumVARIANT* LPENUMVARIANT;
  941. [local]
  942. HRESULT Next(
  943. [in] ULONG celt,
  944. [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar,
  945. [out] ULONG * pCeltFetched
  946. );
  947. [call_as(Next)]
  948. HRESULT RemoteNext(
  949. [in] ULONG celt,
  950. [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar,
  951. [out] ULONG * pCeltFetched
  952. );
  953. HRESULT Skip(
  954. [in] ULONG celt
  955. );
  956. HRESULT Reset(
  957. );
  958. HRESULT Clone(
  959. [out] IEnumVARIANT ** ppEnum
  960. );
  961. }
  962. [
  963. object,
  964. uuid(00020403-0000-0000-C000-000000000046),
  965. pointer_default(unique)
  966. ]
  967. interface ITypeComp : IUnknown
  968. {
  969. typedef [unique] ITypeComp * LPTYPECOMP;
  970. typedef [v1_enum] enum tagDESCKIND {
  971. DESCKIND_NONE = 0,
  972. DESCKIND_FUNCDESC,
  973. DESCKIND_VARDESC,
  974. DESCKIND_TYPECOMP,
  975. DESCKIND_IMPLICITAPPOBJ,
  976. DESCKIND_MAX
  977. } DESCKIND;
  978. typedef union tagBINDPTR {
  979. FUNCDESC * lpfuncdesc;
  980. VARDESC * lpvardesc;
  981. ITypeComp * lptcomp;
  982. } BINDPTR, * LPBINDPTR;
  983. [local]
  984. HRESULT Bind(
  985. [in] LPOLESTR szName,
  986. [in] ULONG lHashVal,
  987. [in] WORD wFlags,
  988. [out] ITypeInfo ** ppTInfo,
  989. [out] DESCKIND * pDescKind,
  990. [out] BINDPTR * pBindPtr
  991. );
  992. [call_as(Bind)]
  993. HRESULT RemoteBind(
  994. [in] LPOLESTR szName,
  995. [in] ULONG lHashVal,
  996. [in] WORD wFlags,
  997. [out] ITypeInfo ** ppTInfo,
  998. [out] DESCKIND * pDescKind,
  999. [out] LPFUNCDESC * ppFuncDesc,
  1000. [out] LPVARDESC * ppVarDesc,
  1001. [out] ITypeComp ** ppTypeComp,
  1002. [out] CLEANLOCALSTORAGE * pDummy
  1003. );
  1004. [local]
  1005. HRESULT BindType(
  1006. [in] LPOLESTR szName,
  1007. [in] ULONG lHashVal,
  1008. [out] ITypeInfo ** ppTInfo,
  1009. [out] ITypeComp ** ppTComp
  1010. );
  1011. [call_as(BindType)]
  1012. HRESULT RemoteBindType(
  1013. [in] LPOLESTR szName,
  1014. [in] ULONG lHashVal,
  1015. [out] ITypeInfo ** ppTInfo
  1016. );
  1017. }
  1018. [
  1019. object,
  1020. uuid(00020401-0000-0000-C000-000000000046),
  1021. pointer_default(unique)
  1022. ]
  1023. interface ITypeInfo : IUnknown
  1024. {
  1025. typedef [unique] ITypeInfo * LPTYPEINFO;
  1026. [local]
  1027. HRESULT GetTypeAttr(
  1028. [out] TYPEATTR ** ppTypeAttr
  1029. );
  1030. [call_as(GetTypeAttr)]
  1031. HRESULT RemoteGetTypeAttr(
  1032. [out] LPTYPEATTR * ppTypeAttr,
  1033. [out] CLEANLOCALSTORAGE * pDummy
  1034. );
  1035. HRESULT GetTypeComp(
  1036. [out] ITypeComp ** ppTComp
  1037. );
  1038. [local]
  1039. HRESULT GetFuncDesc(
  1040. [in] UINT index,
  1041. [out] FUNCDESC ** ppFuncDesc
  1042. );
  1043. [call_as(GetFuncDesc)]
  1044. HRESULT RemoteGetFuncDesc(
  1045. [in] UINT index,
  1046. [out] LPFUNCDESC * ppFuncDesc,
  1047. [out] CLEANLOCALSTORAGE * pDummy
  1048. );
  1049. [local]
  1050. HRESULT GetVarDesc(
  1051. [in] UINT index,
  1052. [out] VARDESC ** ppVarDesc
  1053. );
  1054. [call_as(GetVarDesc)]
  1055. HRESULT RemoteGetVarDesc(
  1056. [in] UINT index,
  1057. [out] LPVARDESC * ppVarDesc,
  1058. [out] CLEANLOCALSTORAGE * pDummy
  1059. );
  1060. [local]
  1061. HRESULT GetNames(
  1062. [in] MEMBERID memid,
  1063. [out,size_is(cMaxNames),length_is(*pcNames)] BSTR * rgBstrNames,
  1064. [in] UINT cMaxNames,
  1065. [out] UINT * pcNames
  1066. );
  1067. [call_as(GetNames)]
  1068. HRESULT RemoteGetNames(
  1069. [in] MEMBERID memid,
  1070. [out,size_is(cMaxNames),length_is(*pcNames)] BSTR * rgBstrNames,
  1071. [in] UINT cMaxNames,
  1072. [out] UINT * pcNames
  1073. );
  1074. HRESULT GetRefTypeOfImplType(
  1075. [in] UINT index,
  1076. [out] HREFTYPE * pRefType
  1077. );
  1078. HRESULT GetImplTypeFlags(
  1079. [in] UINT index,
  1080. [out] INT * pImplTypeFlags
  1081. );
  1082. [local]
  1083. HRESULT GetIDsOfNames(
  1084. [in, size_is(cNames)] LPOLESTR * rgszNames,
  1085. [in] UINT cNames,
  1086. [out, size_is(cNames)] MEMBERID * pMemId
  1087. );
  1088. [call_as(GetIDsOfNames)]
  1089. HRESULT LocalGetIDsOfNames(
  1090. void
  1091. );
  1092. [local]
  1093. HRESULT Invoke(
  1094. [in] PVOID pvInstance,
  1095. [in] MEMBERID memid,
  1096. [in] WORD wFlags,
  1097. [in, out] DISPPARAMS * pDispParams,
  1098. [out] VARIANT * pVarResult,
  1099. [out] EXCEPINFO * pExcepInfo,
  1100. [out] UINT * puArgErr
  1101. );
  1102. [call_as(Invoke)]
  1103. HRESULT LocalInvoke (
  1104. void
  1105. );
  1106. [local]
  1107. HRESULT GetDocumentation(
  1108. [in] MEMBERID memid,
  1109. [out] BSTR * pBstrName,
  1110. [out] BSTR * pBstrDocString,
  1111. [out] DWORD * pdwHelpContext,
  1112. [out] BSTR * pBstrHelpFile
  1113. );
  1114. [call_as(GetDocumentation)]
  1115. HRESULT RemoteGetDocumentation(
  1116. [in] MEMBERID memid,
  1117. [in] DWORD refPtrFlags,
  1118. [out] BSTR * pBstrName,
  1119. [out] BSTR * pBstrDocString,
  1120. [out] DWORD * pdwHelpContext,
  1121. [out] BSTR * pBstrHelpFile
  1122. );
  1123. [local]
  1124. HRESULT GetDllEntry(
  1125. [in] MEMBERID memid,
  1126. [in] INVOKEKIND invKind,
  1127. [out] BSTR * pBstrDllName,
  1128. [out] BSTR * pBstrName,
  1129. [out] WORD * pwOrdinal
  1130. );
  1131. [call_as(GetDllEntry)]
  1132. HRESULT RemoteGetDllEntry(
  1133. [in] MEMBERID memid,
  1134. [in] INVOKEKIND invKind,
  1135. [in] DWORD refPtrFlags,
  1136. [out] BSTR * pBstrDllName,
  1137. [out] BSTR * pBstrName,
  1138. [out] WORD * pwOrdinal
  1139. );
  1140. HRESULT GetRefTypeInfo(
  1141. [in] HREFTYPE hRefType,
  1142. [out] ITypeInfo ** ppTInfo
  1143. );
  1144. [local]
  1145. HRESULT AddressOfMember(
  1146. [in] MEMBERID memid,
  1147. [in] INVOKEKIND invKind,
  1148. [out] PVOID * ppv
  1149. );
  1150. [call_as(AddressOfMember)]
  1151. HRESULT LocalAddressOfMember(
  1152. void
  1153. );
  1154. [local]
  1155. HRESULT CreateInstance(
  1156. [in] IUnknown * pUnkOuter,
  1157. [in] REFIID riid,
  1158. [out, iid_is(riid)] PVOID * ppvObj
  1159. );
  1160. [call_as(CreateInstance)]
  1161. HRESULT RemoteCreateInstance(
  1162. [in] REFIID riid,
  1163. [out, iid_is(riid)] IUnknown ** ppvObj
  1164. );
  1165. HRESULT GetMops(
  1166. [in] MEMBERID memid,
  1167. [out] BSTR * pBstrMops
  1168. );
  1169. [local]
  1170. HRESULT GetContainingTypeLib(
  1171. [out] ITypeLib ** ppTLib,
  1172. [out] UINT * pIndex
  1173. );
  1174. [call_as(GetContainingTypeLib)]
  1175. HRESULT RemoteGetContainingTypeLib(
  1176. [out] ITypeLib ** ppTLib,
  1177. [out] UINT * pIndex
  1178. );
  1179. [local]
  1180. void ReleaseTypeAttr(
  1181. [in] TYPEATTR * pTypeAttr
  1182. );
  1183. [call_as(ReleaseTypeAttr)]
  1184. HRESULT LocalReleaseTypeAttr(
  1185. void
  1186. );
  1187. [local]
  1188. void ReleaseFuncDesc(
  1189. [in] FUNCDESC * pFuncDesc
  1190. );
  1191. [call_as(ReleaseFuncDesc)]
  1192. HRESULT LocalReleaseFuncDesc(
  1193. void
  1194. );
  1195. [local]
  1196. void ReleaseVarDesc(
  1197. [in] VARDESC * pVarDesc
  1198. );
  1199. [call_as(ReleaseVarDesc)]
  1200. HRESULT LocalReleaseVarDesc(
  1201. void
  1202. );
  1203. }
  1204. [
  1205. object,
  1206. uuid(00020412-0000-0000-C000-000000000046),
  1207. pointer_default(unique)
  1208. ]
  1209. interface ITypeInfo2 : ITypeInfo
  1210. {
  1211. typedef [unique] ITypeInfo2 * LPTYPEINFO2;
  1212. HRESULT GetTypeKind(
  1213. [out] TYPEKIND * pTypeKind
  1214. );
  1215. HRESULT GetTypeFlags(
  1216. [out] ULONG * pTypeFlags
  1217. );
  1218. HRESULT GetFuncIndexOfMemId(
  1219. [in] MEMBERID memid,
  1220. [in] INVOKEKIND invKind,
  1221. [out] UINT * pFuncIndex
  1222. );
  1223. HRESULT GetVarIndexOfMemId(
  1224. [in] MEMBERID memid,
  1225. [out] UINT * pVarIndex
  1226. );
  1227. HRESULT GetCustData(
  1228. [in] REFGUID guid,
  1229. [out] VARIANT * pVarVal
  1230. );
  1231. HRESULT GetFuncCustData(
  1232. [in] UINT index,
  1233. [in] REFGUID guid,
  1234. [out] VARIANT * pVarVal
  1235. );
  1236. HRESULT GetParamCustData(
  1237. [in] UINT indexFunc,
  1238. [in] UINT indexParam,
  1239. [in] REFGUID guid,
  1240. [out] VARIANT * pVarVal
  1241. );
  1242. HRESULT GetVarCustData(
  1243. [in] UINT index,
  1244. [in] REFGUID guid,
  1245. [out] VARIANT * pVarVal
  1246. );
  1247. HRESULT GetImplTypeCustData(
  1248. [in] UINT index,
  1249. [in] REFGUID guid,
  1250. [out] VARIANT * pVarVal
  1251. );
  1252. [local]
  1253. HRESULT GetDocumentation2(
  1254. [in] MEMBERID memid,
  1255. [in] LCID lcid,
  1256. [out] BSTR *pbstrHelpString,
  1257. [out] DWORD *pdwHelpStringContext,
  1258. [out] BSTR *pbstrHelpStringDll
  1259. );
  1260. [call_as(GetDocumentation2)]
  1261. HRESULT RemoteGetDocumentation2(
  1262. [in] MEMBERID memid,
  1263. [in] LCID lcid,
  1264. [in] DWORD refPtrFlags,
  1265. [out] BSTR *pbstrHelpString,
  1266. [out] DWORD *pdwHelpStringContext,
  1267. [out] BSTR *pbstrHelpStringDll
  1268. );
  1269. HRESULT GetAllCustData(
  1270. [out] CUSTDATA * pCustData
  1271. );
  1272. HRESULT GetAllFuncCustData(
  1273. [in] UINT index,
  1274. [out] CUSTDATA * pCustData
  1275. );
  1276. HRESULT GetAllParamCustData(
  1277. [in] UINT indexFunc,
  1278. [in] UINT indexParam,
  1279. [out] CUSTDATA * pCustData
  1280. );
  1281. HRESULT GetAllVarCustData(
  1282. [in] UINT index,
  1283. [out] CUSTDATA * pCustData
  1284. );
  1285. HRESULT GetAllImplTypeCustData(
  1286. [in] UINT index,
  1287. [out] CUSTDATA * pCustData
  1288. );
  1289. }
  1290. [
  1291. object,
  1292. uuid(00020402-0000-0000-C000-000000000046),
  1293. pointer_default(unique)
  1294. ]
  1295. interface ITypeLib : IUnknown
  1296. {
  1297. typedef [v1_enum] enum tagSYSKIND {
  1298. SYS_WIN16 = 0,
  1299. SYS_WIN32,
  1300. SYS_MAC,
  1301. SYS_WIN64
  1302. } SYSKIND;
  1303. typedef [v1_enum] enum tagLIBFLAGS {
  1304. LIBFLAG_FRESTRICTED = 0x01,
  1305. LIBFLAG_FCONTROL = 0x02,
  1306. LIBFLAG_FHIDDEN = 0x04,
  1307. LIBFLAG_FHASDISKIMAGE = 0x08
  1308. } LIBFLAGS;
  1309. typedef [unique] ITypeLib * LPTYPELIB;
  1310. typedef struct tagTLIBATTR {
  1311. GUID guid;
  1312. LCID lcid;
  1313. SYSKIND syskind;
  1314. WORD wMajorVerNum;
  1315. WORD wMinorVerNum;
  1316. WORD wLibFlags;
  1317. } TLIBATTR, * LPTLIBATTR;
  1318. [local]
  1319. UINT GetTypeInfoCount(
  1320. void
  1321. );
  1322. [call_as(GetTypeInfoCount)]
  1323. HRESULT RemoteGetTypeInfoCount(
  1324. [out] UINT * pcTInfo
  1325. );
  1326. HRESULT GetTypeInfo(
  1327. [in] UINT index,
  1328. [out] ITypeInfo ** ppTInfo
  1329. );
  1330. HRESULT GetTypeInfoType(
  1331. [in] UINT index,
  1332. [out] TYPEKIND * pTKind
  1333. );
  1334. HRESULT GetTypeInfoOfGuid(
  1335. [in] REFGUID guid,
  1336. [out] ITypeInfo ** ppTinfo
  1337. );
  1338. [local]
  1339. HRESULT GetLibAttr(
  1340. [out] TLIBATTR ** ppTLibAttr
  1341. );
  1342. [call_as(GetLibAttr)]
  1343. HRESULT RemoteGetLibAttr(
  1344. [out] LPTLIBATTR * ppTLibAttr,
  1345. [out] CLEANLOCALSTORAGE * pDummy
  1346. );
  1347. HRESULT GetTypeComp(
  1348. [out] ITypeComp ** ppTComp
  1349. );
  1350. [local]
  1351. HRESULT GetDocumentation(
  1352. [in] INT index,
  1353. [out] BSTR * pBstrName,
  1354. [out] BSTR * pBstrDocString,
  1355. [out] DWORD * pdwHelpContext,
  1356. [out] BSTR * pBstrHelpFile
  1357. );
  1358. [call_as(GetDocumentation)]
  1359. HRESULT RemoteGetDocumentation(
  1360. [in] INT index,
  1361. [in] DWORD refPtrFlags,
  1362. [out] BSTR * pBstrName,
  1363. [out] BSTR * pBstrDocString,
  1364. [out] DWORD * pdwHelpContext,
  1365. [out] BSTR * pBstrHelpFile
  1366. );
  1367. [local]
  1368. HRESULT IsName(
  1369. [in, out] LPOLESTR szNameBuf,
  1370. [in] ULONG lHashVal,
  1371. [out] BOOL * pfName
  1372. );
  1373. [call_as(IsName)]
  1374. HRESULT RemoteIsName(
  1375. [in] LPOLESTR szNameBuf,
  1376. [in] ULONG lHashVal,
  1377. [out] BOOL * pfName,
  1378. [out] BSTR * pBstrLibName
  1379. );
  1380. [local]
  1381. HRESULT FindName(
  1382. [in, out] LPOLESTR szNameBuf,
  1383. [in] ULONG lHashVal,
  1384. [out,size_is(*pcFound),length_is(*pcFound)] ITypeInfo **ppTInfo,
  1385. [out,size_is(*pcFound),length_is(*pcFound)] MEMBERID * rgMemId,
  1386. [in, out] USHORT * pcFound
  1387. );
  1388. [call_as(FindName)]
  1389. HRESULT RemoteFindName(
  1390. [in] LPOLESTR szNameBuf,
  1391. [in] ULONG lHashVal,
  1392. [out,size_is(*pcFound),length_is(*pcFound)] ITypeInfo **ppTInfo,
  1393. [out,size_is(*pcFound),length_is(*pcFound)] MEMBERID * rgMemId,
  1394. [in, out] USHORT * pcFound,
  1395. [out] BSTR * pBstrLibName
  1396. );
  1397. [local]
  1398. void ReleaseTLibAttr(
  1399. [in] TLIBATTR * pTLibAttr
  1400. );
  1401. [call_as(ReleaseTLibAttr)]
  1402. HRESULT LocalReleaseTLibAttr(
  1403. void
  1404. );
  1405. }
  1406. [
  1407. object,
  1408. uuid(00020411-0000-0000-C000-000000000046),
  1409. pointer_default(unique)
  1410. ]
  1411. interface ITypeLib2 : ITypeLib
  1412. {
  1413. typedef [unique] ITypeLib2 * LPTYPELIB2;
  1414. HRESULT GetCustData(
  1415. [in] REFGUID guid,
  1416. [out] VARIANT * pVarVal
  1417. );
  1418. [local]
  1419. HRESULT GetLibStatistics(
  1420. [out] ULONG * pcUniqueNames,
  1421. [out] ULONG * pcchUniqueNames
  1422. );
  1423. [call_as(GetLibStatistics)]
  1424. HRESULT RemoteGetLibStatistics(
  1425. [out] ULONG * pcUniqueNames,
  1426. [out] ULONG * pcchUniqueNames
  1427. );
  1428. [local]
  1429. HRESULT GetDocumentation2(
  1430. [in] INT index,
  1431. [in] LCID lcid,
  1432. [out] BSTR *pbstrHelpString,
  1433. [out] DWORD *pdwHelpStringContext,
  1434. [out] BSTR *pbstrHelpStringDll
  1435. );
  1436. [call_as(GetDocumentation2)]
  1437. HRESULT RemoteGetDocumentation2(
  1438. [in] INT index,
  1439. [in] LCID lcid,
  1440. [in] DWORD refPtrFlags,
  1441. [out] BSTR *pbstrHelpString,
  1442. [out] DWORD *pdwHelpStringContext,
  1443. [out] BSTR *pbstrHelpStringDll
  1444. );
  1445. HRESULT GetAllCustData(
  1446. [out] CUSTDATA * pCustData
  1447. );
  1448. }
  1449. [
  1450. object,
  1451. uuid(00020410-0000-0000-C000-000000000046),
  1452. pointer_default(unique),
  1453. local
  1454. ]
  1455. interface ITypeChangeEvents: IUnknown
  1456. {
  1457. typedef [unique] ITypeChangeEvents * LPTYPECHANGEEVENTS;
  1458. // notification messages used by the dynamic typeinfo protocol.
  1459. typedef enum tagCHANGEKIND {
  1460. CHANGEKIND_ADDMEMBER,
  1461. CHANGEKIND_DELETEMEMBER,
  1462. CHANGEKIND_SETNAMES,
  1463. CHANGEKIND_SETDOCUMENTATION,
  1464. CHANGEKIND_GENERAL,
  1465. CHANGEKIND_INVALIDATE,
  1466. CHANGEKIND_CHANGEFAILED,
  1467. CHANGEKIND_MAX
  1468. } CHANGEKIND;
  1469. HRESULT RequestTypeChange(
  1470. [in] CHANGEKIND changeKind,
  1471. [in] ITypeInfo * pTInfoBefore,
  1472. [in] LPOLESTR pStrName,
  1473. [out] INT * pfCancel
  1474. );
  1475. HRESULT AfterTypeChange(
  1476. [in] CHANGEKIND changeKind,
  1477. [in] ITypeInfo * pTInfoAfter,
  1478. [in] LPOLESTR pStrName
  1479. );
  1480. }
  1481. [
  1482. object,
  1483. uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
  1484. pointer_default(unique)
  1485. ]
  1486. interface IErrorInfo: IUnknown
  1487. {
  1488. typedef [unique] IErrorInfo * LPERRORINFO;
  1489. HRESULT GetGUID(
  1490. [out] GUID * pGUID
  1491. );
  1492. HRESULT GetSource(
  1493. [out] BSTR * pBstrSource
  1494. );
  1495. HRESULT GetDescription(
  1496. [out] BSTR * pBstrDescription
  1497. );
  1498. HRESULT GetHelpFile(
  1499. [out] BSTR * pBstrHelpFile
  1500. );
  1501. HRESULT GetHelpContext(
  1502. [out] DWORD * pdwHelpContext
  1503. );
  1504. }
  1505. [
  1506. object,
  1507. uuid(22F03340-547D-101B-8E65-08002B2BD119),
  1508. pointer_default(unique)
  1509. ]
  1510. interface ICreateErrorInfo: IUnknown
  1511. {
  1512. typedef [unique] ICreateErrorInfo * LPCREATEERRORINFO;
  1513. HRESULT SetGUID(
  1514. [in] REFGUID rguid
  1515. );
  1516. HRESULT SetSource(
  1517. [in] LPOLESTR szSource
  1518. );
  1519. HRESULT SetDescription(
  1520. [in] LPOLESTR szDescription
  1521. );
  1522. HRESULT SetHelpFile(
  1523. [in] LPOLESTR szHelpFile
  1524. );
  1525. HRESULT SetHelpContext(
  1526. [in] DWORD dwHelpContext
  1527. );
  1528. }
  1529. [
  1530. object,
  1531. uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
  1532. pointer_default(unique)
  1533. ]
  1534. interface ISupportErrorInfo: IUnknown
  1535. {
  1536. typedef [unique] ISupportErrorInfo * LPSUPPORTERRORINFO;
  1537. HRESULT InterfaceSupportsErrorInfo(
  1538. [in] REFIID riid
  1539. );
  1540. }
  1541. [
  1542. object,
  1543. uuid(0000002E-0000-0000-C000-000000000046)
  1544. ]
  1545. interface ITypeFactory : IUnknown
  1546. {
  1547. HRESULT CreateFromTypeInfo(
  1548. [in] ITypeInfo *pTypeInfo,
  1549. [in] REFIID riid,
  1550. [out, iid_is(riid)] IUnknown **ppv
  1551. );
  1552. }
  1553. [
  1554. local,
  1555. object,
  1556. uuid(0000002D-0000-0000-C000-000000000046)
  1557. ]
  1558. interface ITypeMarshal : IUnknown
  1559. {
  1560. HRESULT Size(
  1561. [in] PVOID pvType,
  1562. [in] DWORD dwDestContext,
  1563. [in] PVOID pvDestContext,
  1564. [out] ULONG * pSize
  1565. );
  1566. HRESULT Marshal(
  1567. [in] PVOID pvType,
  1568. [in] DWORD dwDestContext,
  1569. [in] PVOID pvDestContext,
  1570. [in] ULONG cbBufferLength,
  1571. [out] BYTE * pBuffer,
  1572. [out] ULONG * pcbWritten
  1573. );
  1574. HRESULT Unmarshal(
  1575. [out] PVOID pvType,
  1576. [in] DWORD dwFlags,
  1577. [in] ULONG cbBufferLength,
  1578. [in] BYTE * pBuffer,
  1579. [out] ULONG * pcbRead
  1580. );
  1581. HRESULT Free(
  1582. [in] PVOID pvType
  1583. );
  1584. }
  1585. [
  1586. local,
  1587. object,
  1588. uuid(0000002F-0000-0000-C000-000000000046)
  1589. ]
  1590. interface IRecordInfo: IUnknown
  1591. {
  1592. typedef [unique] IRecordInfo * LPRECORDINFO;
  1593. HRESULT RecordInit(
  1594. [out] PVOID pvNew
  1595. );
  1596. HRESULT RecordClear(
  1597. [in] PVOID pvExisting
  1598. );
  1599. HRESULT RecordCopy(
  1600. [in] PVOID pvExisting,
  1601. [out] PVOID pvNew
  1602. );
  1603. HRESULT GetGuid(
  1604. [out] GUID * pguid
  1605. );
  1606. HRESULT GetName(
  1607. [out] BSTR * pbstrName
  1608. );
  1609. HRESULT GetSize(
  1610. [out] ULONG * pcbSize
  1611. );
  1612. HRESULT GetTypeInfo(
  1613. [out] ITypeInfo ** ppTypeInfo
  1614. );
  1615. HRESULT GetField(
  1616. [in] PVOID pvData,
  1617. [in] LPCOLESTR szFieldName,
  1618. [out] VARIANT * pvarField
  1619. );
  1620. HRESULT GetFieldNoCopy(
  1621. [in] PVOID pvData,
  1622. [in] LPCOLESTR szFieldName,
  1623. [out] VARIANT * pvarField,
  1624. [out] PVOID * ppvDataCArray
  1625. );
  1626. HRESULT PutField(
  1627. [in] ULONG wFlags,
  1628. [in,out] PVOID pvData,
  1629. [in] LPCOLESTR szFieldName,
  1630. [in] VARIANT * pvarField
  1631. );
  1632. HRESULT PutFieldNoCopy(
  1633. [in] ULONG wFlags,
  1634. [in,out] PVOID pvData,
  1635. [in] LPCOLESTR szFieldName,
  1636. [in] VARIANT * pvarField
  1637. );
  1638. HRESULT GetFieldNames(
  1639. [in,out] ULONG * pcNames,
  1640. [out,size_is(*pcNames),length_is(*pcNames)] BSTR * rgBstrNames
  1641. );
  1642. BOOL IsMatchingType(
  1643. [in] IRecordInfo * pRecordInfo
  1644. );
  1645. PVOID RecordCreate(
  1646. );
  1647. HRESULT RecordCreateCopy(
  1648. [in] PVOID pvSource,
  1649. [out] PVOID * ppvDest
  1650. );
  1651. HRESULT RecordDestroy(
  1652. [in] PVOID pvRecord
  1653. );
  1654. }
  1655. [
  1656. object,
  1657. uuid(3127CA40-446E-11CE-8135-00AA004BB851),
  1658. pointer_default(unique)
  1659. ]
  1660. interface IErrorLog : IUnknown
  1661. {
  1662. typedef IErrorLog * LPERRORLOG;
  1663. HRESULT AddError(
  1664. [in] LPCOLESTR pszPropName,
  1665. [in] EXCEPINFO * pExcepInfo
  1666. );
  1667. }
  1668. [
  1669. object,
  1670. uuid(55272A00-42CB-11CE-8135-00AA004BB851),
  1671. pointer_default(unique)
  1672. ]
  1673. interface IPropertyBag : IUnknown
  1674. {
  1675. typedef IPropertyBag * LPPROPERTYBAG;
  1676. [local]
  1677. HRESULT Read(
  1678. [in] LPCOLESTR pszPropName,
  1679. [in, out] VARIANT * pVar,
  1680. [in] IErrorLog * pErrorLog
  1681. );
  1682. [call_as(Read)]
  1683. HRESULT RemoteRead(
  1684. [in] LPCOLESTR pszPropName,
  1685. [out] VARIANT * pVar,
  1686. [in] IErrorLog * pErrorLog,
  1687. [in] DWORD varType,
  1688. [in] IUnknown * pUnkObj
  1689. );
  1690. HRESULT Write(
  1691. [in] LPCOLESTR pszPropName,
  1692. [in] VARIANT * pVar
  1693. );
  1694. }
  1695. cpp_quote("#if ( _MSC_VER >= 800 )")
  1696. cpp_quote("#if _MSC_VER >= 1200")
  1697. cpp_quote("#pragma warning(pop)")
  1698. cpp_quote("#else")
  1699. cpp_quote("#pragma warning(default:4201) /* Nameless struct/union */")
  1700. cpp_quote("#endif")
  1701. cpp_quote("#endif")