home *** CD-ROM | disk | FTP | other *** search
/ ...taking it to the Macs! / ...taking it to the Macs!.iso / Extras / ActiveX Mac SDK / ActiveX SDK / Headers / DISPATCH.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  43.1 KB  |  1,419 lines  |  [TEXT/????]

  1. /*** 
  2. *dispatch.h - OLE Automation definitions.
  3. *
  4. *  Copyright (C) 1992-1995, Microsoft Corporation.  All Rights Reserved.
  5. *
  6. *Purpose:
  7. *  This file defines the Ole Automation interfaces and APIs.
  8. *
  9. *Implementation Notes:
  10. *  This file requires ole2.h
  11. *
  12. *****************************************************************************/
  13.  
  14. #ifndef _DISPATCH_H_
  15. #define _DISPATCH_H_
  16.  
  17. #include "variant.h"
  18.  
  19. #ifndef BEGIN_INTERFACE
  20. # define BEGIN_INTERFACE
  21. #endif
  22.  
  23. #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_MSC_VER))
  24. # define UNION_NAME(X) X
  25. #else
  26. # define UNION_NAME(X)
  27. #endif
  28.  
  29.  
  30. DEFINE_OLEGUID(IID_IDispatch,        0x00020400L, 0, 0);
  31. DEFINE_OLEGUID(IID_IEnumVARIANT,    0x00020404L, 0, 0);
  32. DEFINE_OLEGUID(IID_ITypeInfo,        0x00020401L, 0, 0);
  33. DEFINE_OLEGUID(IID_ITypeLib,        0x00020402L, 0, 0);
  34. DEFINE_OLEGUID(IID_ITypeComp,        0x00020403L, 0, 0);
  35. DEFINE_OLEGUID(IID_ICreateTypeInfo,    0x00020405L, 0, 0);
  36. DEFINE_OLEGUID(IID_ICreateTypeLib,    0x00020406L, 0, 0);
  37.  
  38. DEFINE_OLEGUID(IID_StdOle,        0x00020430L, 0, 0);
  39. #define STDOLE_MAJORVERNUM        0x1
  40. #define STDOLE_MINORVERNUM        0x0
  41. #define STDOLE_LCID            0x0000
  42.  
  43. // {1CF2B120-547D-101B-8E65-08002B2BD119}
  44. DEFINE_GUID(IID_IErrorInfo,
  45.   0x1CF2B120L, 0x547D, 0x101B, 0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19);
  46.  
  47. // {22F03340-547D-101B-8E65-08002B2BD119}
  48. DEFINE_GUID(IID_ICreateErrorInfo,
  49.   0x22F03340L, 0x547D, 0x101B, 0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19);
  50.  
  51. // {DF0B3D60-548F-101B-8E65-08002B2BD119}
  52. DEFINE_GUID(IID_ISupportErrorInfo,
  53.   0xDF0B3D60L, 0x548F, 0x101B, 0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19);
  54.  
  55.  
  56. /* forward declarations */
  57. #ifdef __cplusplus
  58.  
  59.   interface IDispatch;
  60.   interface IEnumVARIANT;
  61.   interface ITypeInfo;
  62.   interface ITypeLib;
  63.   interface ITypeComp;
  64.   interface ICreateTypeInfo;
  65.   interface ICreateTypeLib;
  66.   interface IErrorInfo;
  67.   interface ICreateErrorInfo;
  68.   interface ISupportErrorInfo;
  69.   
  70. #else
  71.  
  72.   typedef interface IDispatch IDispatch;
  73.   typedef interface IEnumVARIANT IEnumVARIANT;
  74.   typedef interface ITypeInfo ITypeInfo;
  75.   typedef interface ITypeLib ITypeLib;
  76.   typedef interface ITypeComp ITypeComp;
  77.   typedef interface ICreateTypeInfo ICreateTypeInfo;
  78.   typedef interface ICreateTypeLib ICreateTypeLib;
  79.   typedef interface IErrorInfo IErrorInfo;
  80.   typedef interface ICreateErrorInfo ICreateErrorInfo;
  81.   typedef interface ISupportErrorInfo ISupportErrorInfo;
  82.   
  83. #endif
  84.  
  85.  
  86. /* OLE Automation error codes */
  87.  
  88. #define DISP_ERROR(X) MAKE_SCODE(SEVERITY_ERROR, FACILITY_DISPATCH, X)
  89.  
  90. #define DISP_E_UNKNOWNINTERFACE        DISP_ERROR(1)
  91. #define DISP_E_MEMBERNOTFOUND        DISP_ERROR(3)
  92. #define DISP_E_PARAMNOTFOUND        DISP_ERROR(4)
  93. #define DISP_E_TYPEMISMATCH        DISP_ERROR(5)
  94. #define DISP_E_UNKNOWNNAME        DISP_ERROR(6)
  95. #define DISP_E_NONAMEDARGS        DISP_ERROR(7)
  96. #define DISP_E_BADVARTYPE        DISP_ERROR(8)
  97. #define DISP_E_EXCEPTION        DISP_ERROR(9)
  98. #define DISP_E_OVERFLOW            DISP_ERROR(10)
  99. #define DISP_E_BADINDEX            DISP_ERROR(11)
  100. #define DISP_E_UNKNOWNLCID        DISP_ERROR(12)
  101. #define DISP_E_ARRAYISLOCKED        DISP_ERROR(13)
  102. #define DISP_E_BADPARAMCOUNT        DISP_ERROR(14)
  103. #define DISP_E_PARAMNOTOPTIONAL        DISP_ERROR(15)
  104. #define DISP_E_BADCALLEE        DISP_ERROR(16)
  105. #define DISP_E_NOTACOLLECTION        DISP_ERROR(17)
  106.  
  107.  
  108. #define TYPE_ERROR(X) MAKE_SCODE(SEVERITY_ERROR, FACILITY_DISPATCH, X)
  109.  
  110. #define TYPE_E_BUFFERTOOSMALL        TYPE_ERROR(32790)
  111. #define TYPE_E_INVDATAREAD        TYPE_ERROR(32792)
  112. #define TYPE_E_UNSUPFORMAT        TYPE_ERROR(32793)
  113. #define TYPE_E_REGISTRYACCESS        TYPE_ERROR(32796)
  114. #define TYPE_E_LIBNOTREGISTERED     TYPE_ERROR(32797)
  115. #define TYPE_E_UNDEFINEDTYPE        TYPE_ERROR(32807)
  116. #define TYPE_E_QUALIFIEDNAMEDISALLOWED    TYPE_ERROR(32808)
  117. #define TYPE_E_INVALIDSTATE        TYPE_ERROR(32809)
  118. #define TYPE_E_WRONGTYPEKIND        TYPE_ERROR(32810)
  119. #define TYPE_E_ELEMENTNOTFOUND        TYPE_ERROR(32811)
  120. #define TYPE_E_AMBIGUOUSNAME        TYPE_ERROR(32812)
  121. #define TYPE_E_NAMECONFLICT        TYPE_ERROR(32813)
  122. #define TYPE_E_UNKNOWNLCID        TYPE_ERROR(32814)
  123. #define TYPE_E_DLLFUNCTIONNOTFOUND    TYPE_ERROR(32815)
  124. #define TYPE_E_BADMODULEKIND        TYPE_ERROR(35005)
  125. #define TYPE_E_SIZETOOBIG        TYPE_ERROR(35013)
  126. #define TYPE_E_DUPLICATEID        TYPE_ERROR(35014)
  127. #define TYPE_E_INVALIDID        TYPE_ERROR(35023)
  128. #define TYPE_E_TYPEMISMATCH        TYPE_ERROR(36000)
  129. #define TYPE_E_OUTOFBOUNDS        TYPE_ERROR(36001)
  130. #define TYPE_E_IOERROR            TYPE_ERROR(36002)
  131. #define TYPE_E_CANTCREATETMPFILE    TYPE_ERROR(36003)
  132. #define TYPE_E_CANTLOADLIBRARY        TYPE_ERROR(40010)
  133. #define TYPE_E_INCONSISTENTPROPFUNCS    TYPE_ERROR(40067)
  134. #define TYPE_E_CIRCULARTYPE        TYPE_ERROR(40068)
  135.  
  136.  
  137. /* if not already picked up from olenls.h */
  138. #ifndef _LCID_DEFINED
  139. typedef unsigned long LCID;
  140. # define _LCID_DEFINED
  141. #endif
  142.  
  143.  
  144.  
  145. /*---------------------------------------------------------------------*/
  146. /*                            BSTR API                                 */
  147. /*---------------------------------------------------------------------*/
  148.  
  149. STDAPI_(BSTR) SysAllocString(const OLECHAR FAR*);
  150. STDAPI_(int)  SysReAllocString(BSTR FAR*, const OLECHAR FAR*);
  151. STDAPI_(BSTR) SysAllocStringLen(const OLECHAR FAR*, unsigned int);
  152. STDAPI_(int)  SysReAllocStringLen(BSTR FAR*, const OLECHAR FAR*, unsigned int);
  153. STDAPI_(void) SysFreeString(BSTR);  
  154. STDAPI_(unsigned int) SysStringLen(BSTR);
  155.  
  156. #ifdef WIN32
  157. STDAPI_(unsigned int) SysStringByteLen(BSTR bstr);
  158. STDAPI_(BSTR) SysAllocStringByteLen(const char FAR* psz, unsigned int len);
  159. #endif
  160.  
  161.  
  162. /*---------------------------------------------------------------------*/
  163. /*                            Time API                                 */
  164. /*---------------------------------------------------------------------*/
  165.  
  166. STDAPI_(int)
  167. DosDateTimeToVariantTime(
  168.     unsigned short wDosDate,
  169.     unsigned short wDosTime,
  170.     double FAR* pvtime);
  171.  
  172. STDAPI_(int)
  173. VariantTimeToDosDateTime(
  174.     double vtime,
  175.     unsigned short FAR* pwDosDate,
  176.     unsigned short FAR* pwDosTime);
  177.  
  178.  
  179. /*---------------------------------------------------------------------*/
  180. /*                          SafeArray API                              */
  181. /*---------------------------------------------------------------------*/
  182.  
  183. STDAPI
  184. SafeArrayAllocDescriptor(unsigned int cDims, SAFEARRAY FAR* FAR* ppsaOut);
  185.  
  186. STDAPI SafeArrayAllocData(SAFEARRAY FAR* psa);
  187.  
  188. STDAPI_(SAFEARRAY FAR*)
  189. SafeArrayCreate(
  190.     VARTYPE vt,
  191.     unsigned int cDims,
  192.     SAFEARRAYBOUND FAR* rgsabound);
  193.  
  194. STDAPI SafeArrayDestroyDescriptor(SAFEARRAY FAR* psa);
  195.  
  196. STDAPI SafeArrayDestroyData(SAFEARRAY FAR* psa);
  197.  
  198. STDAPI SafeArrayDestroy(SAFEARRAY FAR* psa);
  199.  
  200. STDAPI SafeArrayRedim(SAFEARRAY FAR* psa, SAFEARRAYBOUND FAR* psaboundNew);
  201.  
  202. STDAPI_(unsigned int) SafeArrayGetDim(SAFEARRAY FAR* psa);
  203.  
  204. STDAPI_(unsigned int) SafeArrayGetElemsize(SAFEARRAY FAR* psa);
  205.  
  206. STDAPI
  207. SafeArrayGetUBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plUbound);
  208.  
  209. STDAPI
  210. SafeArrayGetLBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plLbound);
  211.  
  212. STDAPI SafeArrayLock(SAFEARRAY FAR* psa);
  213.  
  214. STDAPI SafeArrayUnlock(SAFEARRAY FAR* psa);
  215.  
  216. STDAPI SafeArrayAccessData(SAFEARRAY FAR* psa, void HUGEP* FAR* ppvData);
  217.  
  218. STDAPI SafeArrayUnaccessData(SAFEARRAY FAR* psa);
  219.  
  220. STDAPI
  221. SafeArrayGetElement(
  222.     SAFEARRAY FAR* psa,
  223.     long FAR* rgIndices,
  224.     void FAR* pv);
  225.  
  226. STDAPI
  227. SafeArrayPutElement(
  228.     SAFEARRAY FAR* psa,
  229.     long FAR* rgIndices,
  230.     void FAR* pv);
  231.  
  232. STDAPI
  233. SafeArrayCopy(
  234.     SAFEARRAY FAR* psa,
  235.     SAFEARRAY FAR* FAR* ppsaOut);
  236.  
  237. STDAPI
  238. SafeArrayPtrOfIndex(
  239.     SAFEARRAY FAR* psa,
  240.     long FAR* rgIndices,
  241.     void HUGEP* FAR* ppvData);
  242.  
  243.  
  244. /*---------------------------------------------------------------------*/
  245. /*                           VARIANT API                               */
  246. /*---------------------------------------------------------------------*/
  247.  
  248. STDAPI_(void)
  249. VariantInit(VARIANTARG FAR* pvarg);
  250.  
  251. STDAPI
  252. VariantClear(VARIANTARG FAR* pvarg);
  253.  
  254. STDAPI
  255. VariantCopy(
  256.     VARIANTARG FAR* pvargDest,
  257.     VARIANTARG FAR* pvargSrc);
  258.  
  259. STDAPI
  260. VariantCopyInd(
  261.     VARIANT FAR* pvarDest,
  262.     VARIANTARG FAR* pvargSrc);
  263.  
  264. STDAPI
  265. VariantChangeType(
  266.     VARIANTARG FAR* pvargDest,
  267.     VARIANTARG FAR* pvarSrc,
  268.     unsigned short wFlags,
  269.     VARTYPE vt);
  270.  
  271. STDAPI
  272. VariantChangeTypeEx(
  273.     VARIANTARG FAR* pvargDest,
  274.     VARIANTARG FAR* pvarSrc,
  275.     LCID lcid,        
  276.     unsigned short wFlags,
  277.     VARTYPE vt);
  278.  
  279. #define VARIANT_NOVALUEPROP 1
  280.  
  281.  
  282. /*---------------------------------------------------------------------*/
  283. /*                     VARTYPE Coercion API                            */
  284. /*---------------------------------------------------------------------*/
  285.  
  286. /* Note: The routines that convert *from* a string are defined
  287.  * to take a OLECHAR* rather than a BSTR because no allocation is
  288.  * required, and this makes the routines a bit more generic.
  289.  * They may of course still be passed a BSTR as the strIn param.
  290.  */
  291.  
  292.  
  293. /* Any of the coersion functions that converts either from or to a string
  294.  * takes an additional lcid and dwFlags arguments. The lcid argument allows
  295.  * locale specific parsing to occur.  The dwFlags allow additional function
  296.  * specific condition to occur.  All function that accept the dwFlags argument
  297.  * can include either 0 or LOCALE_NOUSEROVERRIDE flag. In addition, the
  298.  * VarDateFromStr functions also accepts the VAR_TIMEVALUEONLY and 
  299.  * VAR_DATEVALUEONLY flags
  300.  */     
  301.  
  302. #define VAR_TIMEVALUEONLY            0x0001    /* return time value */
  303. #define VAR_DATEVALUEONLY            0x0002    /* return date value */
  304.  
  305.    
  306. STDAPI VarUI1FromI2(short sIn, unsigned char FAR* pbOut);
  307. STDAPI VarUI1FromI4(long lIn, unsigned char FAR* pbOut);
  308. STDAPI VarUI1FromR4(float fltIn, unsigned char FAR* pbOut);
  309. STDAPI VarUI1FromR8(double dblIn, unsigned char FAR* pbOut);
  310. STDAPI VarUI1FromCy(CY cyIn, unsigned char FAR* pbOut);
  311. STDAPI VarUI1FromDate(DATE dateIn, unsigned char FAR* pbOut);
  312. STDAPI VarUI1FromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, unsigned char FAR* pbOut);
  313. STDAPI VarUI1FromDisp(IDispatch FAR* pdispIn, LCID lcid, unsigned char FAR* pbOut);
  314. STDAPI VarUI1FromBool(VARIANT_BOOL boolIn, unsigned char FAR* pbOut);
  315.  
  316. STDAPI VarI2FromUI1(unsigned char bIn, short FAR* psOut);
  317. STDAPI VarI2FromI4(long lIn, short FAR* psOut);
  318. STDAPI VarI2FromR4(float fltIn, short FAR* psOut);
  319. STDAPI VarI2FromR8(double dblIn, short FAR* psOut);
  320. STDAPI VarI2FromCy(CY cyIn, short FAR* psOut);
  321. STDAPI VarI2FromDate(DATE dateIn, short FAR* psOut);
  322. STDAPI VarI2FromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, short FAR* psOut);
  323. STDAPI VarI2FromDisp(IDispatch FAR* pdispIn, LCID lcid, short FAR* psOut);
  324. STDAPI VarI2FromBool(VARIANT_BOOL boolIn, short FAR* psOut);
  325.  
  326. STDAPI VarI4FromUI1(unsigned char bIn, long FAR* plOut);
  327. STDAPI VarI4FromI2(short sIn, long FAR* plOut);
  328. STDAPI VarI4FromR4(float fltIn, long FAR* plOut);
  329. STDAPI VarI4FromR8(double dblIn, long FAR* plOut);
  330. STDAPI VarI4FromCy(CY cyIn, long FAR* plOut);
  331. STDAPI VarI4FromDate(DATE dateIn, long FAR* plOut);
  332. STDAPI VarI4FromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, long FAR* plOut);
  333. STDAPI VarI4FromDisp(IDispatch FAR* pdispIn, LCID lcid, long FAR* plOut);
  334. STDAPI VarI4FromBool(VARIANT_BOOL boolIn, long FAR* plOut);
  335.  
  336. STDAPI VarR4FromUI1(unsigned char bIn, float FAR* pfltOut);
  337. STDAPI VarR4FromI2(short sIn, float FAR* pfltOut);
  338. STDAPI VarR4FromI4(long lIn, float FAR* pfltOut);
  339. STDAPI VarR4FromR8(double dblIn, float FAR* pfltOut);
  340. STDAPI VarR4FromCy(CY cyIn, float FAR* pfltOut);
  341. STDAPI VarR4FromDate(DATE dateIn, float FAR* pfltOut);
  342. STDAPI VarR4FromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, float FAR* pfltOut);
  343. STDAPI VarR4FromDisp(IDispatch FAR* pdispIn, LCID lcid, float FAR* pfltOut);
  344. STDAPI VarR4FromBool(VARIANT_BOOL boolIn, float FAR* pfltOut);
  345.  
  346. STDAPI VarR8FromUI1(unsigned char bIn, double FAR* pdblOut);
  347. STDAPI VarR8FromI2(short sIn, double FAR* pdblOut);
  348. STDAPI VarR8FromI4(long lIn, double FAR* pdblOut);
  349. STDAPI VarR8FromR4(float fltIn, double FAR* pdblOut);
  350. STDAPI VarR8FromCy(CY cyIn, double FAR* pdblOut);
  351. STDAPI VarR8FromDate(DATE dateIn, double FAR* pdblOut);
  352. STDAPI VarR8FromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, double FAR* pdblOut);
  353. STDAPI VarR8FromDisp(IDispatch FAR* pdispIn, LCID lcid, double FAR* pdblOut);
  354. STDAPI VarR8FromBool(VARIANT_BOOL boolIn, double FAR* pdblOut);
  355.  
  356. STDAPI VarDateFromUI1(unsigned char bIn, DATE FAR* pdateOut);
  357. STDAPI VarDateFromI2(short sIn, DATE FAR* pdateOut);
  358. STDAPI VarDateFromI4(long lIn, DATE FAR* pdateOut);
  359. STDAPI VarDateFromR4(float fltIn, DATE FAR* pdateOut);
  360. STDAPI VarDateFromR8(double dblIn, DATE FAR* pdateOut);
  361. STDAPI VarDateFromCy(CY cyIn, DATE FAR* pdateOut);
  362. STDAPI VarDateFromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, DATE FAR* pdateOut);
  363. STDAPI VarDateFromDisp(IDispatch FAR* pdispIn, LCID lcid, DATE FAR* pdateOut);
  364. STDAPI VarDateFromBool(VARIANT_BOOL boolIn, DATE FAR* pdateOut);
  365.  
  366. STDAPI VarCyFromUI1(unsigned char bIn, CY FAR* pcyOut);
  367. STDAPI VarCyFromI2(short sIn, CY FAR* pcyOut);
  368. STDAPI VarCyFromI4(long lIn, CY FAR* pcyOut);
  369. STDAPI VarCyFromR4(float fltIn, CY FAR* pcyOut);
  370. STDAPI VarCyFromR8(double dblIn, CY FAR* pcyOut);
  371. STDAPI VarCyFromDate(DATE dateIn, CY FAR* pcyOut);
  372. STDAPI VarCyFromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, CY FAR* pcyOut);
  373. STDAPI VarCyFromDisp(IDispatch FAR* pdispIn, LCID lcid, CY FAR* pcyOut);
  374. STDAPI VarCyFromBool(VARIANT_BOOL boolIn, CY FAR* pcyOut);
  375.  
  376. STDAPI VarBstrFromUI1(unsigned char bVal, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  377. STDAPI VarBstrFromI2(short iVal, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  378. STDAPI VarBstrFromI4(long lIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  379. STDAPI VarBstrFromR4(float fltIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  380. STDAPI VarBstrFromR8(double dblIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  381. STDAPI VarBstrFromCy(CY cyIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  382. STDAPI VarBstrFromDate(DATE dateIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  383. STDAPI VarBstrFromDisp(IDispatch FAR* pdispIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  384. STDAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  385.  
  386. STDAPI VarBoolFromUI1(unsigned char bIn, VARIANT_BOOL FAR* pboolOut);
  387. STDAPI VarBoolFromI2(short sIn, VARIANT_BOOL FAR* pboolOut);
  388. STDAPI VarBoolFromI4(long lIn, VARIANT_BOOL FAR* pboolOut);
  389. STDAPI VarBoolFromR4(float fltIn, VARIANT_BOOL FAR* pboolOut);
  390. STDAPI VarBoolFromR8(double dblIn, VARIANT_BOOL FAR* pboolOut);
  391. STDAPI VarBoolFromDate(DATE dateIn, VARIANT_BOOL FAR* pboolOut);
  392. STDAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL FAR* pboolOut);
  393. STDAPI VarBoolFromStr(OLECHAR FAR* strIn, LCID lcid, unsigned long dwFlags, VARIANT_BOOL FAR* pboolOut);
  394. STDAPI VarBoolFromDisp(IDispatch FAR* pdispIn, LCID lcid, VARIANT_BOOL FAR* pboolOut);
  395.  
  396.  
  397. /* Mac Note: On the Mac, the coersion functions support the 
  398.  * Symantec C++ calling convention for float/double. To support
  399.  * float/double arguments compiled with the MPW C compiler, 
  400.  * use the following APIs to move MPW float/double values into
  401.  * a VARIANT.
  402.  */
  403.  
  404. #ifdef _MAC
  405. STDAPI MPWVarFromR4(float FAR* pfltIn, VARIANT FAR* pvarOut);
  406. STDAPI MPWVarFromR8(double FAR* pdblIn, VARIANT FAR* pvarOut);
  407. STDAPI MPWR4FromVar(VARIANT FAR* pvarIn, float FAR* pfltOut);
  408. STDAPI MPWR8FromVar(VARIANT FAR* pvarIn, double FAR* pdblOut);
  409. #endif
  410.  
  411.  
  412.  
  413. /*---------------------------------------------------------------------*/
  414. /*                             ITypeLib                                */
  415. /*---------------------------------------------------------------------*/
  416.  
  417.  
  418. typedef long DISPID;
  419. typedef DISPID MEMBERID;
  420.  
  421. #define MEMBERID_NIL DISPID_UNKNOWN
  422. #define ID_DEFAULTINST  -2
  423.  
  424. typedef enum tagSYSKIND {
  425.       SYS_WIN16
  426.     , SYS_WIN32
  427.     , SYS_MAC
  428. #ifdef _MAC
  429.     , SYS_FORCELONG = 2147483647
  430. #endif
  431. } SYSKIND;
  432.  
  433. typedef enum tagLIBFLAGS {
  434.       LIBFLAG_FRESTRICTED = 0x01
  435.       , LIBFLAG_FCONTROL = 0x02
  436.       , LIBFLAG_FHIDDEN = 0x04
  437. #ifdef _MAC
  438.     , LIBFLAG_FORCELONG  = 2147483647
  439. #endif
  440. } LIBFLAGS;
  441.  
  442. typedef struct FARSTRUCT tagTLIBATTR {
  443.     GUID guid;            /* globally unique library id */
  444.     LCID lcid;            /* locale of the TypeLibrary */
  445.     SYSKIND syskind;
  446.     unsigned short wMajorVerNum;/* major version number    */
  447.     unsigned short wMinorVerNum;/* minor version number    */
  448.     unsigned short wLibFlags;    /* library flags */
  449. } TLIBATTR, FAR* LPTLIBATTR;
  450.  
  451. typedef enum tagTYPEKIND {
  452.       TKIND_ENUM = 0
  453.     , TKIND_RECORD
  454.     , TKIND_MODULE
  455.     , TKIND_INTERFACE
  456.     , TKIND_DISPATCH
  457.     , TKIND_COCLASS
  458.     , TKIND_ALIAS
  459.     , TKIND_UNION
  460.     , TKIND_MAX            /* end of enum marker */
  461. #ifdef _MAC
  462.     , TKIND_FORCELONG = 2147483647
  463. #endif
  464. } TYPEKIND;
  465.  
  466. #undef  INTERFACE
  467. #define INTERFACE ITypeLib
  468.  
  469. DECLARE_INTERFACE_(ITypeLib, IUnknown)
  470. {
  471.     BEGIN_INTERFACE
  472.  
  473.     /* IUnknown methods */
  474.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  475.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  476.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  477.  
  478.     /* ITypeLib methods */
  479.     STDMETHOD_(unsigned int,GetTypeInfoCount)(THIS) PURE;
  480.  
  481.     STDMETHOD(GetTypeInfo)(THIS_
  482.       unsigned int index, ITypeInfo FAR* FAR* pptinfo) PURE;
  483.  
  484.     STDMETHOD(GetTypeInfoType)(THIS_
  485.       unsigned int index, TYPEKIND FAR* ptypekind) PURE;
  486.  
  487.     STDMETHOD(GetTypeInfoOfGuid)(THIS_
  488.       REFGUID guid, ITypeInfo FAR* FAR* pptinfo) PURE;
  489.  
  490.     STDMETHOD(GetLibAttr)(THIS_
  491.       TLIBATTR FAR* FAR* pptlibattr) PURE;
  492.  
  493.     STDMETHOD(GetTypeComp)(THIS_
  494.       ITypeComp FAR* FAR* pptcomp) PURE;
  495.  
  496.     STDMETHOD(GetDocumentation)(THIS_
  497.       int index,
  498.       BSTR FAR* pbstrName,
  499.       BSTR FAR* pbstrDocString,
  500.       unsigned long FAR* pdwHelpContext,
  501.       BSTR FAR* pbstrHelpFile) PURE;
  502.  
  503.     STDMETHOD(IsName)(THIS_ 
  504.       OLECHAR FAR* szNameBuf,
  505.       unsigned long lHashVal,
  506.       int FAR* lpfName) PURE;
  507.  
  508.     STDMETHOD(FindName)(THIS_
  509.       OLECHAR FAR* szNameBuf,
  510.       unsigned long lHashVal,
  511.       ITypeInfo FAR* FAR* rgptinfo,
  512.       MEMBERID FAR* rgmemid,
  513.       unsigned short FAR* pcFound) PURE;
  514.  
  515.     STDMETHOD_(void, ReleaseTLibAttr)(THIS_ TLIBATTR FAR* ptlibattr) PURE;
  516. };
  517.  
  518. typedef ITypeLib FAR* LPTYPELIB;
  519.  
  520.  
  521.  
  522. /*---------------------------------------------------------------------*/
  523. /*                            ITypeInfo                                */
  524. /*---------------------------------------------------------------------*/
  525.  
  526. typedef unsigned long HREFTYPE;
  527.  
  528.  
  529. typedef struct FARSTRUCT tagTYPEDESC {
  530.     union {
  531.       /* VT_PTR - the pointed-at type */
  532.       struct FARSTRUCT tagTYPEDESC FAR* lptdesc;
  533.  
  534.       /* VT_CARRAY */
  535.       struct FARSTRUCT tagARRAYDESC FAR* lpadesc;
  536.  
  537.       /* VT_USERDEFINED - this is used to get a TypeInfo for the UDT */
  538.       HREFTYPE hreftype;
  539.  
  540.     }UNION_NAME(u);
  541.     VARTYPE vt;
  542. } TYPEDESC;
  543.  
  544. typedef struct FARSTRUCT tagARRAYDESC {
  545.     TYPEDESC tdescElem;        /* element type */
  546.     unsigned short cDims;    /* dimension count */
  547.     SAFEARRAYBOUND rgbounds[1];    /* variable length array of bounds */
  548. } ARRAYDESC;
  549.  
  550. typedef struct FARSTRUCT tagIDLDESC {
  551. #if defined(WIN32) || defined(_MAC)
  552.     unsigned long dwReserved;
  553. #else
  554.     BSTR bstrIDLInfo;        /* reserved, but original name retained for
  555.                    compatibilty */
  556. #endif
  557.     unsigned short wIDLFlags;    /* IN, OUT, etc */
  558. } IDLDESC, FAR* LPIDLDESC;
  559.  
  560.  
  561. #define IDLFLAG_NONE    0
  562. #define IDLFLAG_FIN    0x1
  563. #define IDLFLAG_FOUT    0x2
  564. #define IDLFLAG_FLCID        0x4
  565. #define IDLFLAG_FRETVAL        0x8
  566.  
  567. typedef struct FARSTRUCT tagELEMDESC {
  568.     TYPEDESC tdesc;        /* the type of the element */
  569.     IDLDESC idldesc;        /* info for remoting the element */ 
  570. } ELEMDESC, FAR* LPELEMDESC;
  571.  
  572.  
  573. typedef struct FARSTRUCT tagTYPEATTR {
  574.     GUID guid;            /* the GUID of the TypeInfo */
  575.     LCID lcid;            /* locale of member names and doc strings */
  576.     unsigned long dwReserved;
  577.     MEMBERID memidConstructor;    /* ID of constructor, MEMBERID_NIL if none */
  578.     MEMBERID memidDestructor;    /* ID of destructor, MEMBERID_NIL if none */
  579.     OLECHAR FAR* lpstrSchema;    /* reserved for future use */
  580.     unsigned long cbSizeInstance;/* the size of an instance of this type */
  581.     TYPEKIND typekind;        /* the kind of type this typeinfo describes */
  582.     unsigned short cFuncs;    /* number of functions */
  583.     unsigned short cVars;    /* number of variables / data members */
  584.     unsigned short cImplTypes;    /* number of implemented interfaces */
  585.     unsigned short cbSizeVft;    /* the size of this types virtual func table */
  586.     unsigned short cbAlignment;    /* the alignment for an instance of this type */
  587.     unsigned short wTypeFlags;
  588.     unsigned short wMajorVerNum;/* major version number */
  589.     unsigned short wMinorVerNum;/* minor version number */
  590.     TYPEDESC tdescAlias;    /* if typekind == TKIND_ALIAS this specifies
  591.                    the type for which this type is an alias */
  592.     IDLDESC idldescType;        /* IDL attributes of the described type */
  593. } TYPEATTR, FAR* LPTYPEATTR;
  594.  
  595. typedef struct FARSTRUCT tagDISPPARAMS{
  596.     VARIANTARG FAR* rgvarg;
  597.     DISPID FAR* rgdispidNamedArgs;
  598.     unsigned int cArgs;
  599.     unsigned int cNamedArgs;
  600. } DISPPARAMS;
  601.  
  602. typedef struct FARSTRUCT tagEXCEPINFO {
  603.     unsigned short wCode;             /* An error code describing the error. */
  604.                       /* Either (but not both) the wCode or */
  605.                       /* scode fields must be set */
  606.     unsigned short wReserved;
  607.  
  608.     BSTR bstrSource;        /* A textual, human readable name of the
  609.                    source of the exception. It is up to the
  610.                    IDispatch implementor to fill this in.
  611.                    Typically this will be an application name. */
  612.  
  613.     BSTR bstrDescription;   /* A textual, human readable description of the
  614.                    error. If no description is available, NULL
  615.                    should be used. */
  616.  
  617.     BSTR bstrHelpFile;      /* Fully qualified drive, path, and file name
  618.                    of a help file with more information about
  619.                    the error.  If no help is available, NULL
  620.                    should be used. */
  621.  
  622.     unsigned long dwHelpContext;
  623.                 /* help context of topic within the help file. */
  624.  
  625.     void FAR* pvReserved;
  626.  
  627.     /* Use of this field allows an application to defer filling in
  628.        the bstrDescription, bstrHelpFile, and dwHelpContext fields
  629.        until they are needed.  This field might be used, for example,
  630.        if loading the string for the error is a time-consuming
  631.        operation. If deferred fill-in is not desired, this field should
  632.        be set to NULL. */
  633. #ifdef __MACAPI__
  634. # ifdef _MSC_VER
  635.     HRESULT (STDAPICALLTYPE FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  636. # else
  637.     STDAPICALLTYPE HRESULT (FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  638. # endif
  639. #else
  640.     HRESULT (STDAPICALLTYPE FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  641. #endif
  642.  
  643.     SCODE scode;        /* An SCODE describing the error. */
  644.  
  645. } EXCEPINFO, FAR* LPEXCEPINFO;
  646.  
  647. typedef enum tagCALLCONV {
  648.       CC_CDECL = 1
  649.     , CC_MSCPASCAL
  650.     , CC_PASCAL = CC_MSCPASCAL
  651.     , CC_MACPASCAL
  652.     , CC_STDCALL
  653.     , CC_RESERVED
  654.     , CC_SYSCALL
  655.     , CC_MPWCDECL
  656.     , CC_MPWPASCAL
  657.     , CC_MAX            /* end of enum marker */
  658. #ifdef _MAC
  659.     , CC_FORCELONG = 2147483647
  660. #endif
  661. } CALLCONV;
  662.  
  663. typedef enum tagFUNCKIND {
  664.       FUNC_VIRTUAL
  665.     , FUNC_PUREVIRTUAL
  666.     , FUNC_NONVIRTUAL
  667.     , FUNC_STATIC
  668.     , FUNC_DISPATCH
  669. #ifdef _MAC
  670.     , FUNC_FORCELONG = 2147483647
  671. #endif
  672. } FUNCKIND;
  673.  
  674. /* Flags for IDispatch::Invoke */
  675. #define DISPATCH_METHOD        0x1
  676. #define DISPATCH_PROPERTYGET    0x2
  677. #define DISPATCH_PROPERTYPUT    0x4
  678. #define DISPATCH_PROPERTYPUTREF    0x8
  679.  
  680. typedef enum tagINVOKEKIND {
  681.       INVOKE_FUNC = DISPATCH_METHOD
  682.     , INVOKE_PROPERTYGET = DISPATCH_PROPERTYGET
  683.     , INVOKE_PROPERTYPUT = DISPATCH_PROPERTYPUT
  684.     , INVOKE_PROPERTYPUTREF = DISPATCH_PROPERTYPUTREF
  685. #ifdef _MAC
  686.     , INVOKE_FORCELONG = 2147483647
  687. #endif
  688. } INVOKEKIND;
  689.  
  690. typedef struct FARSTRUCT tagFUNCDESC {
  691.     MEMBERID memid;
  692.     SCODE FAR* lprgscode;
  693.     ELEMDESC FAR* lprgelemdescParam;  /* array of parameter types */
  694.     FUNCKIND funckind;
  695.     INVOKEKIND invkind;
  696.     CALLCONV callconv;
  697.     short cParams;
  698.     short cParamsOpt;
  699.     short oVft;
  700.     short cScodes;
  701.     ELEMDESC elemdescFunc;
  702.     unsigned short wFuncFlags;
  703. } FUNCDESC, FAR* LPFUNCDESC;
  704.  
  705. typedef enum tagVARKIND {
  706.       VAR_PERINSTANCE
  707.     , VAR_STATIC
  708.     , VAR_CONST
  709.     , VAR_DISPATCH
  710. #ifdef _MAC
  711.     , VAR_FORCELONG = 2147483647
  712. #endif
  713. } VARKIND;
  714.  
  715. typedef struct FARSTRUCT tagVARDESC {
  716.     MEMBERID memid;
  717.     OLECHAR FAR* lpstrSchema;        /* reserved for future use */
  718.     union {
  719.       /* VAR_PERINSTANCE - the offset of this variable within the instance */
  720.       unsigned long oInst;
  721.  
  722.       /* VAR_CONST - the value of the constant */
  723.       VARIANT FAR* lpvarValue;
  724.  
  725.     }UNION_NAME(u);
  726.     ELEMDESC elemdescVar;
  727.     unsigned short wVarFlags;
  728.     VARKIND varkind;
  729. } VARDESC, FAR* LPVARDESC;
  730.  
  731. typedef enum tagTYPEFLAGS {
  732.       TYPEFLAG_FAPPOBJECT = 0x01
  733.     , TYPEFLAG_FCANCREATE = 0x02
  734.     , TYPEFLAG_FLICENSED = 0x04
  735.     , TYPEFLAG_FPREDECLID = 0x08
  736.     , TYPEFLAG_FHIDDEN = 0x10
  737.     , TYPEFLAG_FCONTROL = 0x20
  738.     , TYPEFLAG_FDUAL = 0x40
  739.     , TYPEFLAG_FNONEXTENSIBLE = 0x80
  740.     , TYPEFLAG_FOLEAUTOMATION = 0x100
  741.     , TYPEFLAG_FRESTRICTED = 0x200
  742. #ifdef _MAC
  743.     , TYPEFLAG_FORCELONG  = 2147483647
  744. #endif
  745. } TYPEFLAGS;
  746.  
  747. typedef enum tagFUNCFLAGS {
  748.       FUNCFLAG_FRESTRICTED= 1
  749.       , FUNCFLAG_FSOURCE= 0x2
  750.       , FUNCFLAG_FBINDABLE= 0x4
  751.       , FUNCFLAG_FREQUESTEDIT= 0x8
  752.       , FUNCFLAG_FDISPLAYBIND= 0x10
  753.       , FUNCFLAG_FDEFAULTBIND= 0x20
  754.       , FUNCFLAG_FHIDDEN= 0x40
  755.       , FUNCFLAG_FUSESGETLASTERROR= 0x80
  756. #ifdef _MAC
  757.     , FUNCFLAG_FORCELONG  = 2147483647
  758. #endif
  759. } FUNCFLAGS;
  760.  
  761. typedef enum tagVARFLAGS {
  762.       VARFLAG_FREADONLY = 1
  763.       , VARFLAG_FSOURCE= 0x2
  764.       , VARFLAG_FBINDABLE= 0x4
  765.       , VARFLAG_FREQUESTEDIT= 0x8
  766.       , VARFLAG_FDISPLAYBIND= 0x10
  767.       , VARFLAG_FDEFAULTBIND= 0x20
  768.       , VARFLAG_FHIDDEN    = 0x40
  769. #ifdef _MAC
  770.     , VARFLAG_FORCELONG   = 2147483647
  771. #endif
  772. } VARFLAGS;
  773.  
  774. /* IMPLTYPE Flags */
  775. #define IMPLTYPEFLAG_FDEFAULT        0x1
  776. #define IMPLTYPEFLAG_FSOURCE        0x2
  777. #define IMPLTYPEFLAG_FRESTRICTED    0x4
  778.  
  779. #undef  INTERFACE
  780. #define INTERFACE ITypeInfo
  781.  
  782. DECLARE_INTERFACE_(ITypeInfo, IUnknown)
  783. {
  784.     BEGIN_INTERFACE
  785.  
  786.     /* IUnknown methods */
  787.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  788.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  789.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  790.  
  791.     /* ITypeInfo methods */
  792.     STDMETHOD(GetTypeAttr)(THIS_ TYPEATTR FAR* FAR* pptypeattr) PURE;
  793.  
  794.     STDMETHOD(GetTypeComp)(THIS_ ITypeComp FAR* FAR* pptcomp) PURE;
  795.  
  796.     STDMETHOD(GetFuncDesc)(THIS_
  797.       unsigned int index, FUNCDESC FAR* FAR* ppfuncdesc) PURE;
  798.  
  799.     STDMETHOD(GetVarDesc)(THIS_
  800.       unsigned int index, VARDESC FAR* FAR* ppvardesc) PURE;
  801.  
  802.     STDMETHOD(GetNames)(THIS_
  803.       MEMBERID memid,
  804.       BSTR FAR* rgbstrNames,
  805.       unsigned int cMaxNames,
  806.       unsigned int FAR* pcNames) PURE;
  807.  
  808.     STDMETHOD(GetRefTypeOfImplType)(THIS_
  809.       unsigned int index, HREFTYPE FAR* phreftype) PURE;
  810.  
  811.     STDMETHOD(GetImplTypeFlags)(THIS_
  812.       unsigned int index, int FAR* pimpltypeflags) PURE;
  813.  
  814.     STDMETHOD(GetIDsOfNames)(THIS_
  815.       OLECHAR FAR* FAR* rgszNames,
  816.       unsigned int cNames,
  817.       MEMBERID FAR* rgmemid) PURE;
  818.  
  819.     STDMETHOD(Invoke)(THIS_
  820.       void FAR* pvInstance,
  821.       MEMBERID memid,
  822.       unsigned short wFlags,
  823.       DISPPARAMS FAR *pdispparams,
  824.       VARIANT FAR *pvarResult,
  825.       EXCEPINFO FAR *pexcepinfo,
  826.       unsigned int FAR *puArgErr) PURE;
  827.  
  828.     STDMETHOD(GetDocumentation)(THIS_
  829.       MEMBERID memid,
  830.       BSTR FAR* pbstrName,
  831.       BSTR FAR* pbstrDocString,
  832.       unsigned long FAR* pdwHelpContext,
  833.       BSTR FAR* pbstrHelpFile) PURE;
  834.  
  835.     STDMETHOD(GetDllEntry)(THIS_
  836.       MEMBERID memid,
  837.       INVOKEKIND invkind, 
  838.       BSTR FAR* pbstrDllName,
  839.       BSTR FAR* pbstrName,
  840.       unsigned short FAR* pwOrdinal) PURE;
  841.  
  842.     STDMETHOD(GetRefTypeInfo)(THIS_
  843.       HREFTYPE hreftype, ITypeInfo FAR* FAR* pptinfo) PURE;
  844.  
  845.     STDMETHOD(AddressOfMember)(THIS_
  846.       MEMBERID memid, INVOKEKIND invkind, void FAR* FAR* ppv) PURE;
  847.  
  848.     STDMETHOD(CreateInstance)(THIS_
  849.       IUnknown FAR* punkOuter,
  850.       REFIID riid,
  851.       void FAR* FAR* ppvObj) PURE;
  852.  
  853.     STDMETHOD(GetMops)(THIS_ MEMBERID memid, BSTR FAR* pbstrMops) PURE;
  854.  
  855.     STDMETHOD(GetContainingTypeLib)(THIS_
  856.       ITypeLib FAR* FAR* pptlib, unsigned int FAR* pindex) PURE;
  857.  
  858.     STDMETHOD_(void, ReleaseTypeAttr)(THIS_ TYPEATTR FAR* ptypeattr) PURE;
  859.     STDMETHOD_(void, ReleaseFuncDesc)(THIS_ FUNCDESC FAR* pfuncdesc) PURE;
  860.     STDMETHOD_(void, ReleaseVarDesc)(THIS_ VARDESC FAR* pvardesc) PURE;
  861. };
  862.  
  863. typedef ITypeInfo FAR* LPTYPEINFO;
  864.  
  865.  
  866. /*---------------------------------------------------------------------*/
  867. /*                            ITypeComp                                */
  868. /*---------------------------------------------------------------------*/
  869.  
  870. typedef enum tagDESCKIND {
  871.       DESCKIND_NONE = 0
  872.     , DESCKIND_FUNCDESC
  873.     , DESCKIND_VARDESC
  874.     , DESCKIND_TYPECOMP
  875.     , DESCKIND_IMPLICITAPPOBJ
  876.     , DESCKIND_MAX        /* end of enum marker */
  877. #ifdef _MAC
  878.     , DESCKIND_FORCELONG = 2147483647
  879. #endif
  880. } DESCKIND;
  881.  
  882. typedef union tagBINDPTR {
  883.     FUNCDESC FAR* lpfuncdesc;
  884.     VARDESC FAR* lpvardesc;
  885.     ITypeComp FAR* lptcomp;
  886. } BINDPTR, FAR* LPBINDPTR;
  887.  
  888.  
  889. #undef  INTERFACE
  890. #define INTERFACE ITypeComp
  891.  
  892. DECLARE_INTERFACE_(ITypeComp, IUnknown)
  893. {
  894.     BEGIN_INTERFACE
  895.  
  896.     /* IUnknown methods */
  897.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  898.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  899.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  900.  
  901.     /* ITypeComp methods */
  902.     STDMETHOD(Bind)(THIS_
  903.       OLECHAR FAR* szName,
  904.       unsigned long lHashVal,
  905.       unsigned short wflags,
  906.       ITypeInfo FAR* FAR* pptinfo,
  907.       DESCKIND FAR* pdesckind,
  908.       BINDPTR FAR* pbindptr) PURE;
  909.  
  910.     STDMETHOD(BindType)(THIS_
  911.       OLECHAR FAR* szName,
  912.       unsigned long lHashVal,
  913.       ITypeInfo FAR* FAR* pptinfo,
  914.       ITypeComp FAR* FAR* pptcomp) PURE;
  915. };
  916.  
  917. typedef ITypeComp FAR* LPTYPECOMP;
  918.  
  919.  
  920.  
  921. /*---------------------------------------------------------------------*/
  922. /*                         ICreateTypeLib                              */
  923. /*---------------------------------------------------------------------*/
  924.  
  925.  
  926. #undef  INTERFACE
  927. #define INTERFACE ICreateTypeLib
  928.  
  929. DECLARE_INTERFACE_(ICreateTypeLib, IUnknown)
  930. {
  931.     BEGIN_INTERFACE
  932.  
  933.     /* IUnknown methods */
  934.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  935.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  936.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  937.  
  938.     /* ICreateTypeLib methods */
  939.     STDMETHOD(CreateTypeInfo)(THIS_
  940.       OLECHAR FAR* szName,
  941.       TYPEKIND tkind,
  942.       ICreateTypeInfo FAR* FAR* lplpictinfo) PURE;
  943.  
  944.     STDMETHOD(SetName)(THIS_ OLECHAR FAR* szName) PURE;
  945.  
  946.     STDMETHOD(SetVersion)(THIS_
  947.       unsigned short wMajorVerNum, unsigned short wMinorVerNum) PURE;
  948.  
  949.     STDMETHOD(SetGuid) (THIS_ REFGUID guid) PURE;
  950.  
  951.     STDMETHOD(SetDocString)(THIS_ OLECHAR FAR* szDoc) PURE;
  952.  
  953.     STDMETHOD(SetHelpFileName)(THIS_ OLECHAR FAR* szHelpFileName) PURE;
  954.  
  955.     STDMETHOD(SetHelpContext)(THIS_ unsigned long dwHelpContext) PURE;
  956.  
  957.     STDMETHOD(SetLcid)(THIS_ LCID lcid) PURE;
  958.  
  959.     STDMETHOD(SetLibFlags)(THIS_ unsigned int uLibFlags) PURE;
  960.  
  961.     STDMETHOD(SaveAllChanges)(THIS) PURE;
  962. };
  963.  
  964. typedef ICreateTypeLib FAR* LPCREATETYPELIB;
  965.  
  966.  
  967.  
  968. /*---------------------------------------------------------------------*/
  969. /*                         ICreateTypeInfo                             */
  970. /*---------------------------------------------------------------------*/
  971.  
  972. #undef  INTERFACE
  973. #define INTERFACE ICreateTypeInfo
  974.  
  975. DECLARE_INTERFACE_(ICreateTypeInfo, IUnknown)
  976. {
  977.     BEGIN_INTERFACE
  978.  
  979.     /* IUnknown methods */
  980.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  981.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  982.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  983.  
  984.     /* ICreateTypeInfo methods */
  985.     STDMETHOD(SetGuid)(THIS_ REFGUID guid) PURE;
  986.  
  987.     STDMETHOD(SetTypeFlags)(THIS_ unsigned int uTypeFlags) PURE;
  988.  
  989.     STDMETHOD(SetDocString)(THIS_ OLECHAR FAR* pstrDoc) PURE;
  990.  
  991.     STDMETHOD(SetHelpContext)(THIS_ unsigned long dwHelpContext) PURE;
  992.  
  993.     STDMETHOD(SetVersion)(THIS_
  994.       unsigned short wMajorVerNum, unsigned short wMinorVerNum) PURE;
  995.  
  996.     STDMETHOD(AddRefTypeInfo)(THIS_
  997.       ITypeInfo FAR* ptinfo, HREFTYPE FAR* phreftype) PURE;
  998.  
  999.     STDMETHOD(AddFuncDesc)(THIS_
  1000.       unsigned int index, FUNCDESC FAR* pfuncdesc) PURE;
  1001.  
  1002.     STDMETHOD(AddImplType)(THIS_
  1003.       unsigned int index, HREFTYPE hreftype) PURE;
  1004.  
  1005.     STDMETHOD(SetImplTypeFlags)(THIS_
  1006.       unsigned int index, int impltypeflags) PURE;
  1007.  
  1008.     STDMETHOD(SetAlignment)(THIS_ unsigned short cbAlignment) PURE;
  1009.  
  1010.     STDMETHOD(SetSchema)(THIS_ OLECHAR FAR* lpstrSchema) PURE;
  1011.  
  1012.     STDMETHOD(AddVarDesc)(THIS_
  1013.       unsigned int index, VARDESC FAR* pvardesc) PURE;
  1014.  
  1015.     STDMETHOD(SetFuncAndParamNames)(THIS_
  1016.       unsigned int index, OLECHAR FAR* FAR* rgszNames, unsigned int cNames) PURE;
  1017.  
  1018.     STDMETHOD(SetVarName)(THIS_
  1019.       unsigned int index, OLECHAR FAR* szName) PURE;
  1020.  
  1021.     STDMETHOD(SetTypeDescAlias)(THIS_
  1022.       TYPEDESC FAR* ptdescAlias) PURE;
  1023.  
  1024.     STDMETHOD(DefineFuncAsDllEntry)(THIS_
  1025.       unsigned int index, OLECHAR FAR* szDllName, OLECHAR FAR* szProcName) PURE;
  1026.  
  1027.     STDMETHOD(SetFuncDocString)(THIS_
  1028.       unsigned int index, OLECHAR FAR* szDocString) PURE;
  1029.  
  1030.     STDMETHOD(SetVarDocString)(THIS_
  1031.       unsigned int index, OLECHAR FAR* szDocString) PURE;
  1032.  
  1033.     STDMETHOD(SetFuncHelpContext)(THIS_
  1034.       unsigned int index, unsigned long dwHelpContext) PURE;
  1035.  
  1036.     STDMETHOD(SetVarHelpContext)(THIS_
  1037.       unsigned int index, unsigned long dwHelpContext) PURE;
  1038.  
  1039.     STDMETHOD(SetMops)(THIS_
  1040.       unsigned int index, BSTR bstrMops) PURE;
  1041.  
  1042.     STDMETHOD(SetTypeIdldesc)(THIS_
  1043.       IDLDESC FAR* pidldesc) PURE;
  1044.  
  1045.     STDMETHOD(LayOut)(THIS) PURE;
  1046. };
  1047.  
  1048. typedef ICreateTypeInfo FAR* LPCREATETYPEINFO;
  1049.  
  1050.  
  1051.  
  1052. /*---------------------------------------------------------------------*/
  1053. /*                         TypeInfo APIs                               */
  1054. /*---------------------------------------------------------------------*/
  1055. /* compute a 32bit hash value for the given name  based on the lcid and system kind
  1056.  */
  1057. #ifdef WIN32
  1058. STDAPI_(unsigned long)
  1059. LHashValOfNameSysA(SYSKIND syskind, LCID lcid, const char FAR* szName);
  1060. #endif //WIN32
  1061.  
  1062. STDAPI_(unsigned long)
  1063. LHashValOfNameSys(SYSKIND syskind, LCID lcid, const OLECHAR FAR* szName);
  1064.  
  1065. /* Macro to compute a 32bit hash value for the given name based on the LCID
  1066.  */
  1067. #ifdef _MAC
  1068. #define LHashValOfName(lcid, szName) \
  1069.     LHashValOfNameSys(SYS_MAC, lcid, szName)
  1070. #else
  1071. #define LHashValOfName(lcid, szName) \
  1072.     LHashValOfNameSys(SYS_WIN32, lcid, szName)
  1073. #endif
  1074.  
  1075. /* compute a 16bit hash value from 32 bit hash value
  1076.  */
  1077. #define WHashValOfLHashVal(lhashval) \
  1078.      ((unsigned short) (0x0000ffff & (lhashval)))
  1079.  
  1080. /* Check if the hash values are compatible.
  1081. */
  1082. #define IsHashValCompatible(lhashval1, lhashval2) \
  1083.     ((BOOL) ((0x00ff0000 & (lhashval1)) == (0x00ff0000 & (lhashval2))))
  1084.  
  1085. /* load the typelib from the file with the given filename
  1086.  */
  1087. STDAPI
  1088. LoadTypeLib(const OLECHAR FAR* szFile, ITypeLib FAR* FAR* pptlib);
  1089.  
  1090. /* load registered typelib
  1091.  */
  1092. STDAPI
  1093. LoadRegTypeLib(
  1094.     REFGUID rguid,
  1095.     unsigned short wVerMajor,
  1096.     unsigned short wVerMinor,
  1097.     LCID lcid,
  1098.     ITypeLib FAR* FAR* pptlib);
  1099.  
  1100. /* get path to registered typelib
  1101.  */
  1102. STDAPI
  1103. QueryPathOfRegTypeLib(
  1104.     REFGUID guid,
  1105.     unsigned short wMaj,
  1106.     unsigned short wMin,
  1107.     LCID lcid,
  1108.     LPBSTR lpbstrPathName);
  1109.  
  1110. /* add typelib to registry
  1111.  */
  1112. STDAPI
  1113. RegisterTypeLib(
  1114.     ITypeLib FAR* ptlib,
  1115.     OLECHAR FAR* szFullPath,
  1116.     OLECHAR FAR* szHelpDir);
  1117.  
  1118. STDAPI
  1119. CreateTypeLib(SYSKIND syskind, const OLECHAR FAR* szFile, ICreateTypeLib FAR* FAR* ppctlib);
  1120.  
  1121. #ifdef _MAC
  1122. /* load the typelib from the file with the given FSSPEC
  1123.  */
  1124. STDAPI
  1125. LoadTypeLibFSp(const FSSpec *pfsspec, ITypeLib FAR* FAR* pptlib);
  1126.  
  1127. /* register the location of the standard typelib folder
  1128.  */
  1129. STDAPI
  1130. RegisterTypeLibFolder(OLECHAR FAR* szFullPath);
  1131.  
  1132. /* obtain the path to the registered typelib folder
  1133.  */
  1134. STDAPI
  1135. QueryTypeLibFolder(LPBSTR pbstr);
  1136. #endif // _MAC
  1137.  
  1138.  
  1139. /*---------------------------------------------------------------------*/
  1140. /*                          IEnumVARIANT                               */
  1141. /*---------------------------------------------------------------------*/
  1142.  
  1143. #undef  INTERFACE
  1144. #define INTERFACE IEnumVARIANT
  1145.  
  1146. DECLARE_INTERFACE_(IEnumVARIANT, IUnknown)
  1147. {
  1148.     BEGIN_INTERFACE
  1149.  
  1150.     /* IUnknown methods */
  1151.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1152.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1153.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1154.  
  1155.     /* IEnumVARIANT methods */
  1156.     STDMETHOD(Next)(
  1157.       THIS_ unsigned long celt, VARIANT FAR* rgvar, unsigned long FAR* pceltFetched) PURE;
  1158.     STDMETHOD(Skip)(THIS_ unsigned long celt) PURE;
  1159.     STDMETHOD(Reset)(THIS) PURE;
  1160.     STDMETHOD(Clone)(THIS_ IEnumVARIANT FAR* FAR* ppenum) PURE;
  1161. };
  1162.  
  1163. typedef IEnumVARIANT FAR* LPENUMVARIANT;
  1164.  
  1165.  
  1166. /*---------------------------------------------------------------------*/
  1167. /*                             IDispatch                               */
  1168. /*---------------------------------------------------------------------*/
  1169.  
  1170.  
  1171. #undef  INTERFACE
  1172. #define INTERFACE IDispatch
  1173.  
  1174. DECLARE_INTERFACE_(IDispatch, IUnknown)
  1175. {
  1176.     BEGIN_INTERFACE
  1177.  
  1178.     /* IUnknown methods */
  1179.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1180.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1181.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1182.  
  1183.     /* IDispatch methods */
  1184.     STDMETHOD(GetTypeInfoCount)(THIS_ unsigned int FAR* pctinfo) PURE;
  1185.  
  1186.     STDMETHOD(GetTypeInfo)(
  1187.       THIS_
  1188.       unsigned int itinfo,
  1189.       LCID lcid,
  1190.       ITypeInfo FAR* FAR* pptinfo) PURE;
  1191.  
  1192.     STDMETHOD(GetIDsOfNames)(
  1193.       THIS_
  1194.       REFIID riid,
  1195.       OLECHAR FAR* FAR* rgszNames,
  1196.       unsigned int cNames,
  1197.       LCID lcid,
  1198.       DISPID FAR* rgdispid) PURE;
  1199.  
  1200.     STDMETHOD(Invoke)(
  1201.       THIS_
  1202.       DISPID dispidMember,
  1203.       REFIID riid,
  1204.       LCID lcid,
  1205.       unsigned short wFlags,
  1206.       DISPPARAMS FAR* pdispparams,
  1207.       VARIANT FAR* pvarResult,
  1208.       EXCEPINFO FAR* pexcepinfo,
  1209.       unsigned int FAR* puArgErr) PURE;
  1210. };
  1211.  
  1212. typedef IDispatch FAR* LPDISPATCH;
  1213.  
  1214.  
  1215. /* DISPID reserved for the standard "value" property */
  1216. #define DISPID_VALUE    0
  1217.  
  1218. /* DISPID reserved to indicate an "unknown" name */
  1219. #define DISPID_UNKNOWN    -1
  1220.  
  1221. /* The following DISPID is reserved to indicate the param
  1222.  * that is the right-hand-side (or "put" value) of a PropertyPut
  1223.  */
  1224. #define DISPID_PROPERTYPUT -3
  1225.  
  1226. /* DISPID reserved for the standard "NewEnum" method */
  1227. #define DISPID_NEWENUM    -4
  1228.  
  1229. /* DISPID reserved for the standard "Evaluate" method */
  1230. #define DISPID_EVALUATE    -5
  1231.  
  1232. #define DISPID_CONSTRUCTOR -6
  1233. #define DISPID_DESTRUCTOR -7
  1234. #define DISPID_COLLECT -8
  1235.  
  1236. /* The range -500 through -999 is reserved for Controls */
  1237. /* The range 0x80010000 through 0x8001FFFF is reserved for Controls */
  1238. /* The remainder of the negative DISPIDs are reserved for future use */
  1239.  
  1240.  
  1241. //---------------------------------------------------------------------
  1242. //                      IErrorInfo, et al
  1243. //---------------------------------------------------------------------
  1244.  
  1245. #undef  INTERFACE
  1246. #define INTERFACE  IErrorInfo
  1247. DECLARE_INTERFACE_(IErrorInfo, IUnknown)
  1248. {
  1249.     BEGIN_INTERFACE
  1250.  
  1251.     /* IUnknown methods */
  1252.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1253.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1254.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1255.  
  1256.     /* IErrorInfo methods */
  1257.     STDMETHOD(GetGUID)(THIS_ GUID FAR* pguid) PURE;
  1258.     STDMETHOD(GetSource)(THIS_ BSTR FAR* pbstrSource) PURE;
  1259.     STDMETHOD(GetDescription)(THIS_ BSTR FAR* pbstrDescription) PURE;
  1260.     STDMETHOD(GetHelpFile)(THIS_ BSTR FAR* pbstrHelpFile) PURE;
  1261.     STDMETHOD(GetHelpContext)(THIS_ unsigned long FAR* pdwHelpContext) PURE;
  1262. };
  1263.  
  1264. #undef  INTERFACE
  1265. #define INTERFACE  ICreateErrorInfo
  1266. DECLARE_INTERFACE_(ICreateErrorInfo, IUnknown)
  1267. {
  1268.     BEGIN_INTERFACE
  1269.  
  1270.     /* IUnknown methods */
  1271.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1272.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1273.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1274.  
  1275.     /* ICreateErrorInfo methods */
  1276.     STDMETHOD(SetGUID)(THIS_ REFGUID rguid) PURE;
  1277.     STDMETHOD(SetSource)(THIS_ LPOLESTR szSource) PURE;
  1278.     STDMETHOD(SetDescription)(THIS_ LPOLESTR szDescription) PURE;
  1279.     STDMETHOD(SetHelpFile)(THIS_ LPOLESTR szHelpFile) PURE;
  1280.     STDMETHOD(SetHelpContext)(THIS_ unsigned long dwHelpContext) PURE;
  1281. };
  1282.  
  1283. #undef  INTERFACE
  1284. #define INTERFACE  ISupportErrorInfo
  1285. DECLARE_INTERFACE_(ISupportErrorInfo, IUnknown)
  1286. {
  1287.     BEGIN_INTERFACE
  1288.  
  1289.     /* IUnknown methods */
  1290.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1291.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1292.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1293.  
  1294.     /* ISupportErrorInfo methods */
  1295.     STDMETHOD(InterfaceSupportsErrorInfo)(THIS_ REFIID riid) PURE;
  1296. };
  1297.  
  1298. STDAPI SetErrorInfo(unsigned long dwReserved, IErrorInfo FAR* perrinfo);
  1299. STDAPI GetErrorInfo(unsigned long dwReserved, IErrorInfo FAR* FAR* pperrinfo);
  1300. STDAPI CreateErrorInfo(ICreateErrorInfo FAR* FAR* pperrinfo);
  1301.  
  1302.  
  1303. /*---------------------------------------------------------------------*/
  1304. /*                   IDispatch implementation support                  */
  1305. /*---------------------------------------------------------------------*/
  1306.  
  1307. typedef struct FARSTRUCT tagPARAMDATA {
  1308.     OLECHAR FAR* szName;        /* parameter name */
  1309.     VARTYPE vt;            /* parameter type */
  1310. } PARAMDATA, FAR* LPPARAMDATA;
  1311.  
  1312. typedef struct FARSTRUCT tagMETHODDATA {
  1313.     OLECHAR FAR* szName;        /* method name */
  1314.     PARAMDATA FAR* ppdata;    /* pointer to an array of PARAMDATAs */
  1315.     DISPID dispid;        /* method ID */
  1316.     unsigned int iMeth;        /* method index */
  1317.     CALLCONV cc;        /* calling convention */
  1318.     unsigned int cArgs;        /* count of arguments */
  1319.     unsigned short wFlags;    /* same wFlags as on IDispatch::Invoke() */
  1320.     VARTYPE vtReturn;
  1321. } METHODDATA, FAR* LPMETHODDATA;
  1322.  
  1323. typedef struct FARSTRUCT tagINTERFACEDATA {
  1324.     METHODDATA FAR* pmethdata;    /* pointer to an array of METHODDATAs */
  1325.     unsigned int cMembers;    /* count of members */
  1326. } INTERFACEDATA, FAR* LPINTERFACEDATA;
  1327.  
  1328.  
  1329.  
  1330. /* Locate the parameter indicated by the given position, and
  1331.  * return it coerced to the given target VARTYPE (vtTarg).
  1332.  */
  1333. STDAPI
  1334. DispGetParam(
  1335.     DISPPARAMS FAR* pdispparams,
  1336.     unsigned int position,
  1337.     VARTYPE vtTarg,
  1338.     VARIANT FAR* pvarResult,
  1339.     unsigned int FAR* puArgErr);
  1340.  
  1341. /* Automatic TypeInfo driven implementation of IDispatch::GetIDsOfNames()
  1342.  */ 
  1343. STDAPI
  1344. DispGetIDsOfNames(
  1345.     ITypeInfo FAR* ptinfo,
  1346.     OLECHAR FAR* FAR* rgszNames,
  1347.     unsigned int cNames,
  1348.     DISPID FAR* rgdispid);
  1349.  
  1350. /* Automatic TypeInfo driven implementation of IDispatch::Invoke()
  1351.  */
  1352. STDAPI
  1353. DispInvoke(
  1354.     void FAR* _this,
  1355.     ITypeInfo FAR* ptinfo,
  1356.     DISPID dispidMember,
  1357.     unsigned short wFlags,
  1358.     DISPPARAMS FAR* pparams,
  1359.     VARIANT FAR* pvarResult,
  1360.     EXCEPINFO FAR* pexcepinfo,
  1361.     unsigned int FAR* puArgErr);
  1362.  
  1363. /* Construct a TypeInfo from an interface data description
  1364.  */
  1365. STDAPI
  1366. CreateDispTypeInfo(
  1367.     INTERFACEDATA FAR* pidata,
  1368.     LCID lcid,
  1369.     ITypeInfo FAR* FAR* pptinfo);
  1370.  
  1371. /* Create an instance of the standard TypeInfo driven IDispatch
  1372.  * implementation.
  1373.  */
  1374. STDAPI
  1375. CreateStdDispatch(
  1376.     IUnknown FAR* punkOuter,
  1377.     void FAR* pvThis,
  1378.     ITypeInfo FAR* ptinfo,
  1379.     IUnknown FAR* FAR* ppunkStdDisp);
  1380.  
  1381.  
  1382. /*---------------------------------------------------------------------*/
  1383. /*                    Active Object Registration API                   */
  1384. /*---------------------------------------------------------------------*/
  1385.  
  1386. /* flags for RegisterActiveObject */
  1387. #define ACTIVEOBJECT_STRONG 0x0
  1388. #define ACTIVEOBJECT_WEAK 0x1
  1389.  
  1390. STDAPI
  1391. RegisterActiveObject(
  1392.     IUnknown FAR* punk,
  1393.     REFCLSID rclsid,
  1394.     unsigned long dwFlags,
  1395.     unsigned long FAR* pdwRegister);
  1396.  
  1397. STDAPI
  1398. RevokeActiveObject(
  1399.     unsigned long dwRegister,
  1400.     void FAR* pvReserved);
  1401.  
  1402. STDAPI
  1403. GetActiveObject(
  1404.     REFCLSID rclsid,
  1405.     void FAR* pvReserved,
  1406.     IUnknown FAR* FAR* ppunk);
  1407.  
  1408.  
  1409. #undef UNION_NAME
  1410.  
  1411. /*---------------------------------------------------------------------*/
  1412. /*                           MISC API                                  */
  1413. /*---------------------------------------------------------------------*/
  1414.  
  1415. STDAPI_(unsigned long) OaBuildVersion(void);
  1416.  
  1417. #endif /* _DISPATCH_H_ */
  1418.  
  1419.