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 / dspcalc2 / dspcalc2.h < prev    next >
C/C++ Source or Header  |  1997-10-05  |  4KB  |  176 lines

  1. /*** 
  2. *dspcalc2.h
  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. *
  14. *
  15. *Implementation Notes:
  16. *
  17. *****************************************************************************/
  18.  
  19. #include "hostenv.h"
  20. #include "resource.h"
  21. #include "clsid.h" 
  22.  
  23. #ifndef CLASS
  24. # ifdef __TURBOC__
  25. #  define CLASS class huge
  26. # else
  27. #  define CLASS class FAR
  28. # endif
  29. #endif
  30.  
  31. #pragma warning(disable:4355)
  32.  
  33. #ifdef _MAC
  34. typedef void * LPVOID;
  35. typedef unsigned long ULONG;
  36. typedef int BOOL;
  37. typedef unsigned int UINT;
  38. typedef unsigned short WORD;
  39. typedef unsigned char BYTE;
  40. typedef unsigned long DWORD;
  41. typedef long LONG;
  42. #define FALSE 0
  43. #define TRUE  1
  44. #define NEAR 
  45. #endif
  46.  
  47. #ifdef _MAC
  48. # define UNUSED(X) ((void)(void*)&(X))
  49. #else
  50. # define UNUSED(X) (X)
  51. #endif
  52.  
  53.  
  54. /* 
  55.  * The .h file included below is created via MkTypLib
  56.  */
  57. #include "calctype.h"
  58.  
  59. #pragma warning(disable:4355)
  60.  
  61. #define DIM(X) (sizeof(X)/sizeof(X[0]))
  62.  
  63.  
  64. // forward decl
  65. CLASS CCalc;
  66.  
  67.  
  68. // Introduced "calculator" interface
  69. //
  70. // This nested class implementes core arithmetic functionality
  71. // (such as it is) *and* is the interface that will be exposed via
  72. // IDispatch for external programmability.
  73. //
  74. CLASS CArith : public _ICalculator {
  75.  public:
  76.  
  77.   /* IUnknown methods */
  78.   STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR * ppvObj);
  79.   STDMETHOD_(ULONG, AddRef)(THIS);
  80.   STDMETHOD_(ULONG, Release)(THIS);
  81.  
  82.   /* ICalculator methods */
  83.   STDMETHOD_(void, put_Accum)(long l);
  84.   STDMETHOD_(long, get_Accum)(void);
  85.   STDMETHOD_(void, put_Opnd)(long l);
  86.   STDMETHOD_(long, get_Opnd)(void);
  87.   STDMETHOD_(void, put_Op)(OPERATORS op);
  88.   STDMETHOD_(OPERATORS, get_Op)(void);
  89.   STDMETHOD_(VARIANT_BOOL, Eval)(void);
  90.   STDMETHOD_(void, DCClear)(void);
  91.   STDMETHOD_(void, Display)(void);
  92.   STDMETHOD_(void, Quit)(void);
  93.   STDMETHOD_(VARIANT_BOOL, Button)(SAFEARRAY FAR* psa);
  94.  
  95.   // the following method is internal, and not exposed for programmability
  96.   BOOL ButtonPush(int button);
  97.  
  98.   CArith(CCalc FAR* pcalc){
  99.      m_pcalc = pcalc;
  100.      DCClear();
  101.   }
  102.  
  103.   enum states { STATE_LOPND, STATE_OP, STATE_ROPND, STATE_EVAL };
  104.  
  105.  private:
  106.   CCalc FAR* m_pcalc;
  107.   OPERATORS    m_op;
  108.   long    m_opnd;
  109.   long    m_accum;
  110.   enum states m_state;
  111. };
  112.  
  113.     
  114. CLASS CCalc : public IUnknown {
  115. public:
  116.     friend CArith;
  117.     
  118.     static CCalc FAR* Create();
  119.  
  120.     STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
  121.     STDMETHOD_(ULONG, AddRef)(void);
  122.     STDMETHOD_(ULONG, Release)(void);
  123.  
  124.     CCalc() : m_arith(this)
  125.     {
  126.       m_refs = 0;
  127. #ifdef _MAC
  128.       m_pdlg = nil;
  129. #else
  130.       m_hwnd = 0;
  131. #endif
  132.       m_punkStdDisp = NULL;
  133.     }
  134.     
  135. #ifdef _MAC
  136.     DialogPtr m_pdlg; 
  137. #else
  138.     HWND m_hwnd;
  139. #endif
  140.     CArith m_arith;
  141.  
  142. private:
  143.     ULONG m_refs;
  144.     IUnknown FAR* m_punkStdDisp;
  145. };
  146.  
  147.  
  148. // the CCalc Class Factory
  149. //
  150. CLASS CCalcCF : public IClassFactory {
  151. public:
  152.     static IClassFactory FAR* Create();
  153.  
  154.     STDMETHOD(QueryInterface)(REFIID riid, void FAR* FAR* ppv);
  155.     STDMETHOD_(ULONG, AddRef)(void);
  156.     STDMETHOD_(ULONG, Release)(void);
  157.  
  158.     STDMETHOD(CreateInstance)(
  159.       IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv);
  160. #ifdef _MAC
  161.     STDMETHOD(LockServer)(unsigned long fLock);
  162. #else
  163.     STDMETHOD(LockServer)(BOOL fLock);
  164. #endif
  165.  
  166.     CCalcCF() { m_refs = 1; }
  167.  
  168. private:
  169.     ULONG m_refs;
  170. };
  171.  
  172. extern HRESULT InitOle(void);
  173. extern HRESULT UninitOle(void);
  174.  
  175. extern CCalc FAR* g_pcalc;
  176.