home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / oleaut / dispcalc / idata.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  3.2 KB  |  91 lines

  1. /*** 
  2. *idata.cpp
  3. *
  4. *  This is a part of the Microsoft Source Code Samples.
  5. *
  6. *  Copyright (C) 1992-1997 Microsoft Corporation. All rights reserved.
  7. *
  8. *  This source code is only intended as a supplement to Microsoft Development
  9. *  Tools and/or WinHelp documentation.  See these sources for detailed
  10. *  information regarding the Microsoft samples programs.
  11. *
  12. *Purpose:
  13. *  This file contains the INTERFACEDATA definitions for the methods
  14. *  and properties on the CCalc object that are exposed for external
  15. *  programmability via IDispatch.
  16. *
  17. *
  18. *Implementation Notes:
  19. *
  20. *****************************************************************************/
  21.  
  22. #include "dispcalc.h"
  23.  
  24.  
  25. //---------------------------------------------------------------------
  26. //                   INTERFACEDATA definitions 
  27. //---------------------------------------------------------------------
  28.  
  29. /* The INTERFACEDATA table describes the methods and properties that
  30.  * are being exposed for external programmability via IDispatch.
  31.  * This table is used to construct a CDispTypeInfo for this interface,
  32.  * and that TypeInfo is in turn used to initialize and drive the
  33.  * default implementation of IDispatch.
  34.  */
  35.  
  36.  
  37. // PDATA1() declares the PARAMDATA for a methods that takes a single param
  38. //
  39. #define PDATA1(NAME, TYPE) \
  40.     static PARAMDATA NEARDATA rgpdata ## NAME = {OLESTR(#NAME), TYPE}
  41.  
  42. // MDATA() declares a single METHODDATA entry
  43. //
  44. #define MDATA(NAME, PDATA, IDMEMBER, IMETH, CARGS, KIND, TYPE) \
  45.     { OLESTR(#NAME), PDATA, IDMEMBER, IMETH, CC_CDECL, CARGS, KIND, TYPE }
  46.  
  47. // The following macro defines the METHODDATA entries for a 
  48. // property Put/Get method pair.
  49. //
  50. // Note: this macro *assumes* that the Put/Get pair are adjacent
  51. // in the vtable, and that the Put method comes first.
  52. //
  53. #define PROPERTY(NAME, IMETH, ID, TYPE) \
  54.     MDATA(NAME, &rgpdata ## NAME, ID, IMETH, 1,DISPATCH_PROPERTYPUT,VT_EMPTY), \
  55.     MDATA(NAME, NULL, ID, IMETH+1, 0, DISPATCH_PROPERTYGET, TYPE)
  56.  
  57. // The following macro is used to define a METHODDATA entry for
  58. // a method that takes zero parameters.
  59. //
  60. #define METHOD0(NAME, IMETH, ID, TYPE) \
  61.     MDATA(NAME, NULL, ID, IMETH, 0, DISPATCH_METHOD, TYPE)
  62.  
  63. // and for one param
  64. #define METHOD1(NAME, IMETH, ID, TYPE) \
  65.     MDATA(NAME, &rgpdata ## NAME, ID, IMETH, 1, DISPATCH_METHOD, TYPE)
  66.  
  67.  
  68. PDATA1(VALUE,  VT_I4);
  69. PDATA1(ACCUM,  VT_I4);
  70. PDATA1(OPND,   VT_I4);
  71. PDATA1(OP,     VT_I2);
  72. PDATA1(BUTTON, VT_BSTR);
  73.  
  74. static METHODDATA NEARDATA rgmdataCCalc[] = 
  75. {
  76.       PROPERTY(VALUE,   IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4) 
  77.     , PROPERTY(ACCUM,   IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4) 
  78.     , PROPERTY(OPND,    IMETH_OPERAND,  IDMEMBER_OPERAND,  VT_I4) 
  79.     , PROPERTY(OP,      IMETH_OPERATOR, IDMEMBER_OPERATOR, VT_I2) 
  80.     ,  METHOD0(EVAL,    IMETH_EVAL,     IDMEMBER_EVAL,     VT_BOOL) 
  81.     ,  METHOD0(DCCLEAR, IMETH_CLEAR,    IDMEMBER_CLEAR,    VT_EMPTY)
  82.     ,  METHOD0(DISPLAY, IMETH_DISPLAY,  IDMEMBER_DISPLAY,  VT_EMPTY)
  83.     ,  METHOD0(QUIT,    IMETH_QUIT,     IDMEMBER_QUIT,     VT_EMPTY)
  84.     ,  METHOD1(BUTTON,  IMETH_BUTTON,   IDMEMBER_BUTTON,   VT_BOOL)
  85. };
  86.  
  87. INTERFACEDATA NEARDATA g_idataCCalc = 
  88. {
  89.     rgmdataCCalc, DIM(rgmdataCCalc)
  90. };
  91.