IDATA.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  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. #include "dispcalc.h"
  22. //---------------------------------------------------------------------
  23. //                   INTERFACEDATA definitions 
  24. //---------------------------------------------------------------------
  25. /* The INTERFACEDATA table describes the methods and properties that
  26.  * are being exposed for external programmability via IDispatch.
  27.  * This table is used to construct a CDispTypeInfo for this interface,
  28.  * and that TypeInfo is in turn used to initialize and drive the
  29.  * default implementation of IDispatch.
  30.  */
  31. // PDATA1() declares the PARAMDATA for a methods that takes a single param
  32. //
  33. #define PDATA1(NAME, TYPE) 
  34.     static PARAMDATA NEARDATA rgpdata ## NAME = {OLESTR(#NAME), TYPE}
  35. // MDATA() declares a single METHODDATA entry
  36. //
  37. #define MDATA(NAME, PDATA, IDMEMBER, IMETH, CARGS, KIND, TYPE) 
  38.     { OLESTR(#NAME), PDATA, IDMEMBER, IMETH, CC_CDECL, CARGS, KIND, TYPE }
  39. // The following macro defines the METHODDATA entries for a 
  40. // property Put/Get method pair.
  41. //
  42. // Note: this macro *assumes* that the Put/Get pair are adjacent
  43. // in the vtable, and that the Put method comes first.
  44. //
  45. #define PROPERTY(NAME, IMETH, ID, TYPE) 
  46.     MDATA(NAME, &rgpdata ## NAME, ID, IMETH, 1,DISPATCH_PROPERTYPUT,VT_EMPTY), 
  47.     MDATA(NAME, NULL, ID, IMETH+1, 0, DISPATCH_PROPERTYGET, TYPE)
  48. // The following macro is used to define a METHODDATA entry for
  49. // a method that takes zero parameters.
  50. //
  51. #define METHOD0(NAME, IMETH, ID, TYPE) 
  52.     MDATA(NAME, NULL, ID, IMETH, 0, DISPATCH_METHOD, TYPE)
  53. // and for one param
  54. #define METHOD1(NAME, IMETH, ID, TYPE) 
  55.     MDATA(NAME, &rgpdata ## NAME, ID, IMETH, 1, DISPATCH_METHOD, TYPE)
  56. PDATA1(VALUE,  VT_I4);
  57. PDATA1(ACCUM,  VT_I4);
  58. PDATA1(OPND,   VT_I4);
  59. PDATA1(OP,     VT_I2);
  60. PDATA1(BUTTON, VT_BSTR);
  61. static METHODDATA NEARDATA rgmdataCCalc[] = 
  62. {
  63.       PROPERTY(VALUE,   IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4) 
  64.     , PROPERTY(ACCUM,   IMETH_ACCUM,    IDMEMBER_ACCUM,    VT_I4) 
  65.     , PROPERTY(OPND,    IMETH_OPERAND,  IDMEMBER_OPERAND,  VT_I4) 
  66.     , PROPERTY(OP,      IMETH_OPERATOR, IDMEMBER_OPERATOR, VT_I2) 
  67.     ,  METHOD0(EVAL,    IMETH_EVAL,     IDMEMBER_EVAL,     VT_BOOL) 
  68.     ,  METHOD0(DCCLEAR, IMETH_CLEAR,    IDMEMBER_CLEAR,    VT_EMPTY)
  69.     ,  METHOD0(DISPLAY, IMETH_DISPLAY,  IDMEMBER_DISPLAY,  VT_EMPTY)
  70.     ,  METHOD0(QUIT,    IMETH_QUIT,     IDMEMBER_QUIT,     VT_EMPTY)
  71.     ,  METHOD1(BUTTON,  IMETH_BUTTON,   IDMEMBER_BUTTON,   VT_BOOL)
  72. };
  73. INTERFACEDATA NEARDATA g_idataCCalc = 
  74. {
  75.     rgmdataCCalc, DIM(rgmdataCCalc)
  76. };