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

Windows编程

开发平台:

Visual C++

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