summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/mfc42/afxdisp.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/sdk/inc/mfc42/afxdisp.h')
-rw-r--r--public/sdk/inc/mfc42/afxdisp.h1413
1 files changed, 1413 insertions, 0 deletions
diff --git a/public/sdk/inc/mfc42/afxdisp.h b/public/sdk/inc/mfc42/afxdisp.h
new file mode 100644
index 000000000..afed8c8d0
--- /dev/null
+++ b/public/sdk/inc/mfc42/afxdisp.h
@@ -0,0 +1,1413 @@
+// This is a part of the Microsoft Foundation Classes C++ library.
+// Copyright (C) 1992-1995 Microsoft Corporation
+// All rights reserved.
+//
+// This source code is only intended as a supplement to the
+// Microsoft Foundation Classes Reference and related
+// electronic documentation provided with the library.
+// See these sources for detailed information regarding the
+// Microsoft Foundation Classes product.
+
+#ifndef __AFXDISP_H__
+#define __AFXDISP_H__
+
+#ifdef _AFX_NO_OLE_SUPPORT
+ #error OLE classes not supported in this library variant.
+#endif
+
+#ifndef __AFXWIN_H__
+ #include <afxwin.h>
+#endif
+
+// include necessary OLE headers
+#ifndef _OBJBASE_H_
+ #include <objbase.h>
+#endif
+#ifndef _OLEAUTO_H_
+ #include <oleauto.h>
+#endif
+#ifndef _OLECTL_H_
+ #include <olectl.h>
+#endif
+//REVIEW: This header has no symbol to prevent repeated includes
+#include <olectlid.h>
+#ifndef __ocidl_h__
+ #include <ocidl.h>
+#endif
+
+#ifdef _AFX_MINREBUILD
+#pragma component(minrebuild, off)
+#endif
+#ifndef _AFX_FULLTYPEINFO
+#pragma component(mintypeinfo, on)
+#endif
+
+#ifndef _AFX_NOFORCE_LIBS
+#ifndef _MAC
+
+/////////////////////////////////////////////////////////////////////////////
+// Win32 libraries
+
+#ifdef _AFXDLL
+ #if defined(_DEBUG) && !defined(_AFX_MONOLITHIC)
+ #ifndef _UNICODE
+ #pragma comment(lib, "mfco42d.lib")
+ #else
+ #pragma comment(lib, "mfco42ud.lib")
+ #endif
+ #endif
+#endif
+
+#pragma comment(lib, "oledlg.lib")
+#pragma comment(lib, "ole32.lib")
+#pragma comment(lib, "olepro32.lib")
+#pragma comment(lib, "oleaut32.lib")
+#pragma comment(lib, "uuid.lib")
+#pragma comment(lib, "urlmon.lib")
+
+#else //!_MAC
+
+/////////////////////////////////////////////////////////////////////////////
+// Mac libraries
+
+#ifdef _AFXDLL
+ #ifdef _DEBUG
+ #pragma comment(lib, "mfco42pd.lib")
+ #else
+ #pragma comment(lib, "mfco42p.lib")
+ #endif
+#endif
+
+#if !defined(_AFXDLL) && !defined(_USRDLL)
+ #ifdef _DEBUG
+ #pragma comment(lib, "wlmoled.lib")
+ #pragma comment(lib, "ole2uid.lib")
+ #else
+ #pragma comment(lib, "wlmole.lib")
+ #pragma comment(lib, "ole2ui.lib")
+ #endif
+ #pragma comment(linker, "/macres:ole2ui.rsc")
+#else
+ #ifdef _DEBUG
+ #pragma comment(lib, "oledlgd.lib")
+ #pragma comment(lib, "msvcoled.lib")
+ #else
+ #pragma comment(lib, "oledlg.lib")
+ #pragma comment(lib, "msvcole.lib")
+ #endif
+#endif
+
+#pragma comment(lib, "uuid.lib")
+
+#ifdef _DEBUG
+ #pragma comment(lib, "ole2d.lib")
+ #pragma comment(lib, "ole2autd.lib")
+#else
+ #pragma comment(lib, "ole2.lib")
+ #pragma comment(lib, "ole2auto.lib")
+#endif
+
+#endif //_MAC
+#endif //!_AFX_NOFORCE_LIBS
+
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef _AFX_PACKING
+#pragma pack(push, _AFX_PACKING)
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// AFXDISP - MFC IDispatch & ClassFactory support
+
+// Classes declared in this file
+
+//CException
+ class COleException; // caught by client or server
+ class COleDispatchException; // special exception for IDispatch calls
+
+//CCmdTarget
+ class COleObjectFactory; // glue for IClassFactory -> runtime class
+ class COleTemplateServer; // server documents using CDocTemplate
+
+class COleDispatchDriver; // helper class to call IDispatch
+
+class COleVariant; // OLE VARIANT wrapper
+class COleCurrency; // Based on OLE CY
+class COleDateTime; // Based on OLE DATE
+class COleDateTimeSpan; // Based on a double
+class COleSafeArray; // Based on OLE VARIANT
+/////////////////////////////////////////////////////////////////////////////
+
+// AFXDLL support
+#undef AFX_DATA
+#define AFX_DATA AFX_OLE_DATA
+
+/////////////////////////////////////////////////////////////////////////////
+// OLE COM (Component Object Model) implementation infrastructure
+// - data driven QueryInterface
+// - standard implementation of aggregate AddRef and Release
+// (see CCmdTarget in AFXWIN.H for more information)
+
+#define METHOD_PROLOGUE(theClass, localClass) \
+ theClass* pThis = \
+ ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
+ AFX_MANAGE_STATE(pThis->m_pModuleState) \
+
+#define METHOD_PROLOGUE_(theClass, localClass) \
+ theClass* pThis = \
+ ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
+
+#ifndef _AFX_NO_NESTED_DERIVATION
+#define METHOD_PROLOGUE_EX(theClass, localClass) \
+ theClass* pThis = ((theClass*)((BYTE*)this - m_nOffset)); \
+ AFX_MANAGE_STATE(pThis->m_pModuleState) \
+
+#define METHOD_PROLOGUE_EX_(theClass, localClass) \
+ theClass* pThis = ((theClass*)((BYTE*)this - m_nOffset)); \
+
+#else
+#define METHOD_PROLOGUE_EX(theClass, localClass) \
+ METHOD_PROLOGUE(theClass, localClass) \
+
+#define METHOD_PROLOGUE_EX_(theClass, localClass) \
+ METHOD_PROLOGUE_(theClass, localClass) \
+
+#endif
+
+// Provided only for compatibility with CDK 1.x
+#define METHOD_MANAGE_STATE(theClass, localClass) \
+ METHOD_PROLOGUE_EX(theClass, localClass) \
+
+#define BEGIN_INTERFACE_PART(localClass, baseClass) \
+ class X##localClass : public baseClass \
+ { \
+ public: \
+ STDMETHOD_(ULONG, AddRef)(); \
+ STDMETHOD_(ULONG, Release)(); \
+ STDMETHOD(QueryInterface)(REFIID iid, LPVOID* ppvObj); \
+
+#ifndef _AFX_NO_NESTED_DERIVATION
+#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
+ class X##localClass : public baseClass \
+ { \
+ public: \
+
+#else
+#define BEGIN_INTERFACE_PART_DERIVE(localClass, baseClass) \
+ BEGIN_INTERFACE_PART(localClass, baseClass) \
+
+#endif
+
+#ifndef _AFX_NO_NESTED_DERIVATION
+#define INIT_INTERFACE_PART(theClass, localClass) \
+ size_t m_nOffset; \
+ INIT_INTERFACE_PART_DERIVE(theClass, localClass) \
+
+#define INIT_INTERFACE_PART_DERIVE(theClass, localClass) \
+ X##localClass() \
+ { m_nOffset = offsetof(theClass, m_x##localClass); } \
+
+#else
+#define INIT_INTERFACE_PART(theClass, localClass)
+#define INIT_INTERFACE_PART_DERIVE(theClass, localClass)
+
+#endif
+
+// Note: Inserts the rest of OLE functionality between these two macros,
+// depending upon the interface that is being implemented. It is not
+// necessary to include AddRef, Release, and QueryInterface since those
+// member functions are declared by the macro.
+
+#define END_INTERFACE_PART(localClass) \
+ } m_x##localClass; \
+ friend class X##localClass; \
+
+#ifdef _AFXDLL
+#define BEGIN_INTERFACE_MAP(theClass, theBase) \
+ const AFX_INTERFACEMAP* PASCAL theClass::_GetBaseInterfaceMap() \
+ { return &theBase::interfaceMap; } \
+ const AFX_INTERFACEMAP* theClass::GetInterfaceMap() const \
+ { return &theClass::interfaceMap; } \
+ const AFX_DATADEF AFX_INTERFACEMAP theClass::interfaceMap = \
+ { &theClass::_GetBaseInterfaceMap, &theClass::_interfaceEntries[0], }; \
+ const AFX_DATADEF AFX_INTERFACEMAP_ENTRY theClass::_interfaceEntries[] = \
+ { \
+
+#else
+#define BEGIN_INTERFACE_MAP(theClass, theBase) \
+ const AFX_INTERFACEMAP* theClass::GetInterfaceMap() const \
+ { return &theClass::interfaceMap; } \
+ const AFX_DATADEF AFX_INTERFACEMAP theClass::interfaceMap = \
+ { &theBase::interfaceMap, &theClass::_interfaceEntries[0], }; \
+ const AFX_DATADEF AFX_INTERFACEMAP_ENTRY theClass::_interfaceEntries[] = \
+ { \
+
+#endif
+
+#define INTERFACE_PART(theClass, iid, localClass) \
+ { &iid, offsetof(theClass, m_x##localClass) }, \
+
+#define INTERFACE_AGGREGATE(theClass, theAggr) \
+ { NULL, offsetof(theClass, theAggr) }, \
+
+#define END_INTERFACE_MAP() \
+ { NULL, (size_t)-1 } \
+ }; \
+
+/////////////////////////////////////////////////////////////////////////////
+// COleException - unexpected or rare OLE error returned
+
+class COleException : public CException
+{
+ DECLARE_DYNAMIC(COleException)
+
+public:
+ SCODE m_sc;
+ static SCODE PASCAL Process(const CException* pAnyException);
+
+// Implementation (use AfxThrowOleException to create)
+public:
+ COleException();
+ virtual ~COleException();
+
+ virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
+ PUINT pnHelpContext = NULL);
+};
+
+void AFXAPI AfxThrowOleException(SCODE sc);
+
+/////////////////////////////////////////////////////////////////////////////
+// IDispatch specific exception
+
+class COleDispatchException : public CException
+{
+ DECLARE_DYNAMIC(COleDispatchException)
+
+public:
+// Attributes
+ WORD m_wCode; // error code (specific to IDispatch implementation)
+ CString m_strDescription; // human readable description of the error
+ DWORD m_dwHelpContext; // help context for error
+
+ // usually empty in application which creates it (eg. servers)
+ CString m_strHelpFile; // help file to use with m_dwHelpContext
+ CString m_strSource; // source of the error (name of server)
+
+// Implementation
+public:
+ COleDispatchException(LPCTSTR lpszDescription, UINT nHelpID, WORD wCode);
+ virtual ~COleDispatchException();
+ static void PASCAL Process(
+ EXCEPINFO* pInfo, const CException* pAnyException);
+
+ virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
+ PUINT pnHelpContext = NULL);
+
+ SCODE m_scError; // SCODE describing the error
+};
+
+void AFXAPI AfxThrowOleDispatchException(WORD wCode, LPCTSTR lpszDescription,
+ UINT nHelpID = 0);
+void AFXAPI AfxThrowOleDispatchException(WORD wCode, UINT nDescriptionID,
+ UINT nHelpID = (UINT)-1);
+
+/////////////////////////////////////////////////////////////////////////////
+// Macros for CCmdTarget IDispatchable classes
+
+#ifdef _AFXDLL
+#define BEGIN_DISPATCH_MAP(theClass, baseClass) \
+ const AFX_DISPMAP* PASCAL theClass::_GetBaseDispatchMap() \
+ { return &baseClass::dispatchMap; } \
+ const AFX_DISPMAP* theClass::GetDispatchMap() const \
+ { return &theClass::dispatchMap; } \
+ const AFX_DISPMAP theClass::dispatchMap = \
+ { &theClass::_GetBaseDispatchMap, &theClass::_dispatchEntries[0], \
+ &theClass::_dispatchEntryCount, &theClass::_dwStockPropMask }; \
+ UINT theClass::_dispatchEntryCount = (UINT)-1; \
+ DWORD theClass::_dwStockPropMask = (DWORD)-1; \
+ const AFX_DISPMAP_ENTRY theClass::_dispatchEntries[] = \
+ { \
+
+#else
+#define BEGIN_DISPATCH_MAP(theClass, baseClass) \
+ const AFX_DISPMAP* theClass::GetDispatchMap() const \
+ { return &theClass::dispatchMap; } \
+ const AFX_DISPMAP theClass::dispatchMap = \
+ { &baseClass::dispatchMap, &theClass::_dispatchEntries[0], \
+ &theClass::_dispatchEntryCount, &theClass::_dwStockPropMask }; \
+ UINT theClass::_dispatchEntryCount = (UINT)-1; \
+ DWORD theClass::_dwStockPropMask = (DWORD)-1; \
+ const AFX_DISPMAP_ENTRY theClass::_dispatchEntries[] = \
+ { \
+
+#endif
+
+#define END_DISPATCH_MAP() \
+ { VTS_NONE, DISPID_UNKNOWN, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)NULL, (AFX_PMSG)NULL, (size_t)-1, afxDispCustom } }; \
+
+// parameter types: by value VTs
+#define VTS_I2 "\x02" // a 'short'
+#define VTS_I4 "\x03" // a 'long'
+#define VTS_R4 "\x04" // a 'float'
+#define VTS_R8 "\x05" // a 'double'
+#define VTS_CY "\x06" // a 'CY' or 'CY*'
+#define VTS_DATE "\x07" // a 'DATE'
+#define VTS_WBSTR "\x08" // an 'LPCOLESTR'
+#define VTS_DISPATCH "\x09" // an 'IDispatch*'
+#define VTS_SCODE "\x0A" // an 'SCODE'
+#define VTS_BOOL "\x0B" // a 'BOOL'
+#define VTS_VARIANT "\x0C" // a 'const VARIANT&' or 'VARIANT*'
+#define VTS_UNKNOWN "\x0D" // an 'IUnknown*'
+#if defined(_UNICODE) || defined(OLE2ANSI)
+ #define VTS_BSTR VTS_WBSTR// an 'LPCOLESTR'
+ #define VT_BSTRT VT_BSTR
+#else
+ #define VTS_BSTR "\x0E" // an 'LPCSTR'
+ #define VT_BSTRA 14
+ #define VT_BSTRT VT_BSTRA
+#endif
+
+// parameter types: by reference VTs
+#define VTS_PI2 "\x42" // a 'short*'
+#define VTS_PI4 "\x43" // a 'long*'
+#define VTS_PR4 "\x44" // a 'float*'
+#define VTS_PR8 "\x45" // a 'double*'
+#define VTS_PCY "\x46" // a 'CY*'
+#define VTS_PDATE "\x47" // a 'DATE*'
+#define VTS_PBSTR "\x48" // a 'BSTR*'
+#define VTS_PDISPATCH "\x49" // an 'IDispatch**'
+#define VTS_PSCODE "\x4A" // an 'SCODE*'
+#define VTS_PBOOL "\x4B" // a 'VARIANT_BOOL*'
+#define VTS_PVARIANT "\x4C" // a 'VARIANT*'
+#define VTS_PUNKNOWN "\x4D" // an 'IUnknown**'
+
+// special VT_ and VTS_ values
+#define VTS_NONE NULL // used for members with 0 params
+#define VT_MFCVALUE 0xFFF // special value for DISPID_VALUE
+#define VT_MFCBYREF 0x40 // indicates VT_BYREF type
+#define VT_MFCMARKER 0xFF // delimits named parameters (INTERNAL USE)
+
+// variant handling (use V_BSTRT when you have ANSI BSTRs, as in DAO)
+#ifndef _UNICODE
+ #define V_BSTRT(b) (LPSTR)V_BSTR(b)
+#else
+ #define V_BSTRT(b) V_BSTR(b)
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// OLE control parameter types
+
+#define VTS_COLOR VTS_I4 // OLE_COLOR
+#define VTS_XPOS_PIXELS VTS_I4 // OLE_XPOS_PIXELS
+#define VTS_YPOS_PIXELS VTS_I4 // OLE_YPOS_PIXELS
+#define VTS_XSIZE_PIXELS VTS_I4 // OLE_XSIZE_PIXELS
+#define VTS_YSIZE_PIXELS VTS_I4 // OLE_YSIZE_PIXELS
+#define VTS_XPOS_HIMETRIC VTS_I4 // OLE_XPOS_HIMETRIC
+#define VTS_YPOS_HIMETRIC VTS_I4 // OLE_YPOS_HIMETRIC
+#define VTS_XSIZE_HIMETRIC VTS_I4 // OLE_XSIZE_HIMETRIC
+#define VTS_YSIZE_HIMETRIC VTS_I4 // OLE_YSIZE_HIMETRIC
+#define VTS_TRISTATE VTS_I2 // OLE_TRISTATE
+#define VTS_OPTEXCLUSIVE VTS_BOOL // OLE_OPTEXCLUSIVE
+
+#define VTS_PCOLOR VTS_PI4 // OLE_COLOR*
+#define VTS_PXPOS_PIXELS VTS_PI4 // OLE_XPOS_PIXELS*
+#define VTS_PYPOS_PIXELS VTS_PI4 // OLE_YPOS_PIXELS*
+#define VTS_PXSIZE_PIXELS VTS_PI4 // OLE_XSIZE_PIXELS*
+#define VTS_PYSIZE_PIXELS VTS_PI4 // OLE_YSIZE_PIXELS*
+#define VTS_PXPOS_HIMETRIC VTS_PI4 // OLE_XPOS_HIMETRIC*
+#define VTS_PYPOS_HIMETRIC VTS_PI4 // OLE_YPOS_HIMETRIC*
+#define VTS_PXSIZE_HIMETRIC VTS_PI4 // OLE_XSIZE_HIMETRIC*
+#define VTS_PYSIZE_HIMETRIC VTS_PI4 // OLE_YSIZE_HIMETRIC*
+#define VTS_PTRISTATE VTS_PI2 // OLE_TRISTATE*
+#define VTS_POPTEXCLUSIVE VTS_PBOOL // OLE_OPTEXCLUSIVE*
+
+#define VTS_FONT VTS_DISPATCH // IFontDispatch*
+#define VTS_PICTURE VTS_DISPATCH // IPictureDispatch*
+
+#define VTS_HANDLE VTS_I4 // OLE_HANDLE
+#define VTS_PHANDLE VTS_PI4 // OLE_HANDLE*
+
+// these DISP_ macros cause the framework to generate the DISPID
+#define DISP_FUNCTION(theClass, szExternalName, pfnMember, vtRetVal, vtsParams) \
+ { _T(szExternalName), DISPID_UNKNOWN, vtsParams, vtRetVal, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnMember, (AFX_PMSG)0, 0, \
+ afxDispCustom }, \
+
+#define DISP_PROPERTY(theClass, szExternalName, memberName, vtPropType) \
+ { _T(szExternalName), DISPID_UNKNOWN, NULL, vtPropType, (AFX_PMSG)0, (AFX_PMSG)0, \
+ offsetof(theClass, memberName), afxDispCustom }, \
+
+#define DISP_PROPERTY_NOTIFY(theClass, szExternalName, memberName, pfnAfterSet, vtPropType) \
+ { _T(szExternalName), DISPID_UNKNOWN, NULL, vtPropType, (AFX_PMSG)0, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnAfterSet, \
+ offsetof(theClass, memberName), afxDispCustom }, \
+
+#define DISP_PROPERTY_EX(theClass, szExternalName, pfnGet, pfnSet, vtPropType) \
+ { _T(szExternalName), DISPID_UNKNOWN, NULL, vtPropType, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnGet, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnSet, 0, afxDispCustom }, \
+
+#define DISP_PROPERTY_PARAM(theClass, szExternalName, pfnGet, pfnSet, vtPropType, vtsParams) \
+ { _T(szExternalName), DISPID_UNKNOWN, vtsParams, vtPropType, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnGet, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnSet, 0, afxDispCustom }, \
+
+// these DISP_ macros allow the app to determine the DISPID
+#define DISP_FUNCTION_ID(theClass, szExternalName, dispid, pfnMember, vtRetVal, vtsParams) \
+ { _T(szExternalName), dispid, vtsParams, vtRetVal, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnMember, (AFX_PMSG)0, 0, \
+ afxDispCustom }, \
+
+#define DISP_PROPERTY_ID(theClass, szExternalName, dispid, memberName, vtPropType) \
+ { _T(szExternalName), dispid, NULL, vtPropType, (AFX_PMSG)0, (AFX_PMSG)0, \
+ offsetof(theClass, memberName), afxDispCustom }, \
+
+#define DISP_PROPERTY_NOTIFY_ID(theClass, szExternalName, dispid, memberName, pfnAfterSet, vtPropType) \
+ { _T(szExternalName), dispid, NULL, vtPropType, (AFX_PMSG)0, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnAfterSet, \
+ offsetof(theClass, memberName), afxDispCustom }, \
+
+#define DISP_PROPERTY_EX_ID(theClass, szExternalName, dispid, pfnGet, pfnSet, vtPropType) \
+ { _T(szExternalName), dispid, NULL, vtPropType, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnGet, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnSet, 0, afxDispCustom }, \
+
+#define DISP_PROPERTY_PARAM_ID(theClass, szExternalName, dispid, pfnGet, pfnSet, vtPropType, vtsParams) \
+ { _T(szExternalName), dispid, vtsParams, vtPropType, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnGet, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnSet, 0, afxDispCustom }, \
+
+// the DISP_DEFVALUE is a special case macro that creates an alias for DISPID_VALUE
+#define DISP_DEFVALUE(theClass, szExternalName) \
+ { _T(szExternalName), DISPID_UNKNOWN, NULL, VT_MFCVALUE, \
+ (AFX_PMSG)0, (AFX_PMSG)0, 0, afxDispCustom }, \
+
+#define DISP_DEFVALUE_ID(theClass, dispid) \
+ { NULL, dispid, NULL, VT_MFCVALUE, (AFX_PMSG)0, (AFX_PMSG)0, 0, \
+ afxDispCustom }, \
+
+/////////////////////////////////////////////////////////////////////////////
+// Macros for creating "creatable" automation classes.
+
+#define DECLARE_OLECREATE(class_name) \
+public: \
+ static AFX_DATA COleObjectFactory factory; \
+ static AFX_DATA const GUID guid; \
+
+#define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid, \
+ RUNTIME_CLASS(class_name), FALSE, _T(external_name)); \
+ const AFX_DATADEF GUID class_name::guid = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \
+
+/////////////////////////////////////////////////////////////////////////////
+// Helper class for driving IDispatch
+
+class COleDispatchDriver
+{
+// Constructors
+public:
+ COleDispatchDriver();
+ COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
+ COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
+
+// Attributes
+ LPDISPATCH m_lpDispatch;
+ BOOL m_bAutoRelease;
+
+// Operations
+ BOOL CreateDispatch(REFCLSID clsid, COleException* pError = NULL);
+ BOOL CreateDispatch(LPCTSTR lpszProgID, COleException* pError = NULL);
+
+ void AttachDispatch(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
+ LPDISPATCH DetachDispatch();
+ // detach and get ownership of m_lpDispatch
+ void ReleaseDispatch();
+
+ // helpers for IDispatch::Invoke
+ void AFX_CDECL InvokeHelper(DISPID dwDispID, WORD wFlags,
+ VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...);
+ void AFX_CDECL SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
+ void GetProperty(DISPID dwDispID, VARTYPE vtProp, void* pvProp) const;
+
+ // special operators
+ operator LPDISPATCH();
+ const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
+
+// Implementation
+public:
+ ~COleDispatchDriver();
+ void InvokeHelperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
+ void* pvRet, const BYTE* pbParamInfo, va_list argList);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// Class Factory implementation (binds OLE class factory -> runtime class)
+// (all specific class factories derive from this class factory)
+
+class COleObjectFactory : public CCmdTarget
+{
+ DECLARE_DYNAMIC(COleObjectFactory)
+
+// Construction
+public:
+ COleObjectFactory(REFCLSID clsid, CRuntimeClass* pRuntimeClass,
+ BOOL bMultiInstance, LPCTSTR lpszProgID);
+
+// Attributes
+ virtual BOOL IsRegistered() const;
+ REFCLSID GetClassID() const;
+
+// Operations
+ virtual BOOL Register();
+ void Revoke();
+ void UpdateRegistry(LPCTSTR lpszProgID = NULL);
+ // default uses m_lpszProgID if not NULL
+ BOOL IsLicenseValid();
+
+ static BOOL PASCAL RegisterAll();
+ static void PASCAL RevokeAll();
+ static BOOL PASCAL UpdateRegistryAll(BOOL bRegister = TRUE);
+
+// Overridables
+protected:
+ virtual CCmdTarget* OnCreateObject();
+ virtual BOOL UpdateRegistry(BOOL bRegister);
+ virtual BOOL VerifyUserLicense();
+ virtual BOOL GetLicenseKey(DWORD dwReserved, BSTR* pbstrKey);
+ virtual BOOL VerifyLicenseKey(BSTR bstrKey);
+
+// Implementation
+public:
+ virtual ~COleObjectFactory();
+#ifdef _DEBUG
+ void AssertValid() const;
+ void Dump(CDumpContext& dc) const;
+#endif
+
+public:
+ COleObjectFactory* m_pNextFactory; // list of factories maintained
+
+protected:
+ DWORD m_dwRegister; // registry identifier
+ CLSID m_clsid; // registered class ID
+ CRuntimeClass* m_pRuntimeClass; // runtime class of CCmdTarget derivative
+ BOOL m_bMultiInstance; // multiple instance?
+ LPCTSTR m_lpszProgID; // human readable class ID
+ BYTE m_bLicenseChecked;
+ BYTE m_bLicenseValid;
+ BYTE m_bRegistered; // is currently registered w/ system
+ BYTE m_bReserved; // reserved for future use
+
+// Interface Maps
+public:
+ BEGIN_INTERFACE_PART(ClassFactory, IClassFactory2)
+ INIT_INTERFACE_PART(COleObjectFactory, ClassFactory)
+ STDMETHOD(CreateInstance)(LPUNKNOWN, REFIID, LPVOID*);
+ STDMETHOD(LockServer)(BOOL);
+ STDMETHOD(GetLicInfo)(LPLICINFO);
+ STDMETHOD(RequestLicKey)(DWORD, BSTR*);
+ STDMETHOD(CreateInstanceLic)(LPUNKNOWN, LPUNKNOWN, REFIID, BSTR,
+ LPVOID*);
+ END_INTERFACE_PART(ClassFactory)
+
+ DECLARE_INTERFACE_MAP()
+
+ friend SCODE AFXAPI AfxDllGetClassObject(REFCLSID, REFIID, LPVOID*);
+ friend SCODE STDAPICALLTYPE DllGetClassObject(REFCLSID, REFIID, LPVOID*);
+};
+
+// Define COleObjectFactoryEx for compatibility with old CDK
+#define COleObjectFactoryEx COleObjectFactory
+
+//////////////////////////////////////////////////////////////////////////////
+// COleTemplateServer - COleObjectFactory using CDocTemplates
+
+// This enumeration is used in AfxOleRegisterServerClass to pick the
+// correct registration entries given the application type.
+enum OLE_APPTYPE
+{
+ OAT_INPLACE_SERVER = 0, // server has full server user-interface
+ OAT_SERVER = 1, // server supports only embedding
+ OAT_CONTAINER = 2, // container supports links to embeddings
+ OAT_DISPATCH_OBJECT = 3, // IDispatch capable object
+ OAT_DOC_OBJECT_SERVER = 4, // sever supports DocObject embedding
+ OAT_DOC_OBJECT_CONTAINER =5,// container supports DocObject clients
+};
+
+class COleTemplateServer : public COleObjectFactory
+{
+// Constructors
+public:
+ COleTemplateServer();
+
+// Operations
+ void ConnectTemplate(REFCLSID clsid, CDocTemplate* pDocTemplate,
+ BOOL bMultiInstance);
+ // set doc template after creating it in InitInstance
+ void UpdateRegistry(OLE_APPTYPE nAppType = OAT_INPLACE_SERVER,
+ LPCTSTR* rglpszRegister = NULL, LPCTSTR* rglpszOverwrite = NULL);
+ // may want to UpdateRegistry if not run with /Embedded
+ BOOL Register();
+
+// Implementation
+protected:
+ virtual CCmdTarget* OnCreateObject();
+ CDocTemplate* m_pDocTemplate;
+
+private:
+ void UpdateRegistry(LPCTSTR lpszProgID);
+ // hide base class version of UpdateRegistry
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// System registry helpers
+
+// Helper to register server in case of no .REG file loaded
+BOOL AFXAPI AfxOleRegisterServerClass(
+ REFCLSID clsid, LPCTSTR lpszClassName,
+ LPCTSTR lpszShortTypeName, LPCTSTR lpszLongTypeName,
+ OLE_APPTYPE nAppType = OAT_SERVER,
+ LPCTSTR* rglpszRegister = NULL, LPCTSTR* rglpszOverwrite = NULL,
+ int nIconIndex = 0, LPCTSTR lpszLocalFilterName = NULL);
+
+// AfxOleRegisterHelper is a worker function used by AfxOleRegisterServerClass
+// (available for advanced registry work)
+BOOL AFXAPI AfxOleRegisterHelper(LPCTSTR const* rglpszRegister,
+ LPCTSTR const* rglpszSymbols, int nSymbols, BOOL bReplace,
+ HKEY hKeyRoot = ((HKEY)0x80000000)); // HKEY_CLASSES_ROOT
+
+/////////////////////////////////////////////////////////////////////////////
+// Connection maps
+
+#define BEGIN_CONNECTION_PART(theClass, localClass) \
+ class X##localClass : public CConnectionPoint \
+ { \
+ public: \
+ X##localClass() \
+ { m_nOffset = offsetof(theClass, m_x##localClass); }
+
+#define CONNECTION_IID(iid) \
+ REFIID GetIID() { return iid; }
+
+#define END_CONNECTION_PART(localClass) \
+ } m_x##localClass; \
+ friend class X##localClass;
+
+#ifdef _AFXDLL
+#define BEGIN_CONNECTION_MAP(theClass, theBase) \
+ const AFX_CONNECTIONMAP* PASCAL theClass::_GetBaseConnectionMap() \
+ { return &theBase::connectionMap; } \
+ const AFX_CONNECTIONMAP* theClass::GetConnectionMap() const \
+ { return &theClass::connectionMap; } \
+ const AFX_DATADEF AFX_CONNECTIONMAP theClass::connectionMap = \
+ { &theClass::_GetBaseConnectionMap, &theClass::_connectionEntries[0], }; \
+ const AFX_DATADEF AFX_CONNECTIONMAP_ENTRY theClass::_connectionEntries[] = \
+ { \
+
+#else
+#define BEGIN_CONNECTION_MAP(theClass, theBase) \
+ const AFX_CONNECTIONMAP* theClass::GetConnectionMap() const \
+ { return &theClass::connectionMap; } \
+ const AFX_DATADEF AFX_CONNECTIONMAP theClass::connectionMap = \
+ { &(theBase::connectionMap), &theClass::_connectionEntries[0], }; \
+ const AFX_DATADEF AFX_CONNECTIONMAP_ENTRY theClass::_connectionEntries[] = \
+ { \
+
+#endif
+
+#define CONNECTION_PART(theClass, iid, localClass) \
+ { &iid, offsetof(theClass, m_x##localClass) }, \
+
+#define END_CONNECTION_MAP() \
+ { NULL, (size_t)-1 } \
+ }; \
+
+/////////////////////////////////////////////////////////////////////////////
+// CConnectionPoint
+
+class CConnectionPoint : public CCmdTarget
+{
+// Constructors
+public:
+ CConnectionPoint();
+
+// Operations
+ POSITION GetStartPosition() const;
+ LPUNKNOWN GetNextConnection(POSITION& pos) const;
+ const CPtrArray* GetConnections(); // obsolete
+
+// Overridables
+ virtual LPCONNECTIONPOINTCONTAINER GetContainer();
+ virtual REFIID GetIID() = 0;
+ virtual void OnAdvise(BOOL bAdvise);
+ virtual int GetMaxConnections();
+ virtual LPUNKNOWN QuerySinkInterface(LPUNKNOWN pUnkSink);
+
+// Implementation
+ ~CConnectionPoint();
+ void CreateConnectionArray();
+ int GetConnectionCount();
+
+protected:
+ size_t m_nOffset;
+ LPUNKNOWN m_pUnkFirstConnection;
+ CPtrArray* m_pConnections;
+
+// Interface Maps
+public:
+ BEGIN_INTERFACE_PART(ConnPt, IConnectionPoint)
+ INIT_INTERFACE_PART(CConnectionPoint, ConnPt)
+ STDMETHOD(GetConnectionInterface)(IID* pIID);
+ STDMETHOD(GetConnectionPointContainer)(
+ IConnectionPointContainer** ppCPC);
+ STDMETHOD(Advise)(LPUNKNOWN pUnkSink, DWORD* pdwCookie);
+ STDMETHOD(Unadvise)(DWORD dwCookie);
+ STDMETHOD(EnumConnections)(LPENUMCONNECTIONS* ppEnum);
+ END_INTERFACE_PART(ConnPt)
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// EventSink Maps
+
+#ifndef _AFX_NO_OCC_SUPPORT
+
+#ifdef _AFXDLL
+#define BEGIN_EVENTSINK_MAP(theClass, baseClass) \
+ const AFX_EVENTSINKMAP* PASCAL theClass::_GetBaseEventSinkMap() \
+ { return &baseClass::eventsinkMap; } \
+ const AFX_EVENTSINKMAP* theClass::GetEventSinkMap() const \
+ { return &theClass::eventsinkMap; } \
+ const AFX_EVENTSINKMAP theClass::eventsinkMap = \
+ { &theClass::_GetBaseEventSinkMap, &theClass::_eventsinkEntries[0], \
+ &theClass::_eventsinkEntryCount }; \
+ UINT theClass::_eventsinkEntryCount = (UINT)-1; \
+ const AFX_EVENTSINKMAP_ENTRY theClass::_eventsinkEntries[] = \
+ { \
+
+#else
+#define BEGIN_EVENTSINK_MAP(theClass, baseClass) \
+ const AFX_EVENTSINKMAP* theClass::GetEventSinkMap() const \
+ { return &theClass::eventsinkMap; } \
+ const AFX_EVENTSINKMAP theClass::eventsinkMap = \
+ { &baseClass::eventsinkMap, &theClass::_eventsinkEntries[0], \
+ &theClass::_eventsinkEntryCount }; \
+ UINT theClass::_eventsinkEntryCount = (UINT)-1; \
+ const AFX_EVENTSINKMAP_ENTRY theClass::_eventsinkEntries[] = \
+ { \
+
+#endif
+
+#define END_EVENTSINK_MAP() \
+ { VTS_NONE, DISPID_UNKNOWN, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)NULL, (AFX_PMSG)NULL, (size_t)-1, afxDispCustom, \
+ (UINT)-1, 0 } }; \
+
+#define ON_EVENT(theClass, id, dispid, pfnHandler, vtsParams) \
+ { _T(""), dispid, vtsParams, VT_BOOL, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnHandler, (AFX_PMSG)0, 0, \
+ afxDispCustom, id, (UINT)-1 }, \
+
+#define ON_EVENT_RANGE(theClass, idFirst, idLast, dispid, pfnHandler, vtsParams) \
+ { _T(""), dispid, vtsParams, VT_BOOL, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnHandler, (AFX_PMSG)0, 0, \
+ afxDispCustom, idFirst, idLast }, \
+
+#define ON_PROPNOTIFY(theClass, id, dispid, pfnRequest, pfnChanged) \
+ { _T(""), dispid, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(BOOL*))&pfnRequest, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(void))&pfnChanged, \
+ 1, afxDispCustom, id, (UINT)-1 }, \
+
+#define ON_PROPNOTIFY_RANGE(theClass, idFirst, idLast, dispid, pfnRequest, pfnChanged) \
+ { _T(""), dispid, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(UINT, BOOL*))&pfnRequest, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(UINT))&pfnChanged, \
+ 1, afxDispCustom, idFirst, idLast }, \
+
+#define ON_DSCNOTIFY(theClass, id, pfnNotify) \
+ { _T(""), DISPID_UNKNOWN, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(DSCSTATE, DSCREASON, BOOL*))&pfnNotify, (AFX_PMSG)0, \
+ 1, afxDispCustom, id, (UINT)-1 }, \
+
+#define ON_DSCNOTIFY_RANGE(theClass, idFirst, idLast, pfnNotify) \
+ { _T(""), DISPID_UNKNOWN, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(UINT, DSCSTATE, DSCREASON, BOOL*))&pfnNotify, (AFX_PMSG)0, \
+ 1, afxDispCustom, idFirst, idLast }, \
+
+#define ON_EVENT_REFLECT(theClass, dispid, pfnHandler, vtsParams) \
+ { _T(""), dispid, vtsParams, VT_BOOL, \
+ (AFX_PMSG)(void (theClass::*)(void))&pfnHandler, (AFX_PMSG)0, 0, \
+ afxDispCustom, (UINT)-1, (UINT)-1 }, \
+
+#define ON_PROPNOTIFY_REFLECT(theClass, dispid, pfnRequest, pfnChanged) \
+ { _T(""), dispid, VTS_NONE, VT_VOID, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(BOOL*))&pfnRequest, \
+ (AFX_PMSG)(BOOL (CCmdTarget::*)(void))&pfnChanged, \
+ 1, afxDispCustom, (UINT)-1, (UINT)-1 }, \
+
+#endif // !_AFX_NO_OCC_SUPPORT
+
+/////////////////////////////////////////////////////////////////////////////
+// Macros for type library information
+
+CTypeLibCache* AFXAPI AfxGetTypeLibCache(const GUID* pTypeLibID);
+
+#define DECLARE_OLETYPELIB(class_name) \
+ protected: \
+ virtual UINT GetTypeInfoCount(); \
+ virtual HRESULT GetTypeLib(LCID, LPTYPELIB*); \
+ virtual CTypeLibCache* GetTypeLibCache(); \
+
+#define IMPLEMENT_OLETYPELIB(class_name, tlid, wVerMajor, wVerMinor) \
+ UINT class_name::GetTypeInfoCount() \
+ { return 1; } \
+ HRESULT class_name::GetTypeLib(LCID lcid, LPTYPELIB* ppTypeLib) \
+ { return ::LoadRegTypeLib(tlid, wVerMajor, wVerMinor, lcid, ppTypeLib); } \
+ CTypeLibCache* class_name::GetTypeLibCache() \
+ { AFX_MANAGE_STATE(m_pModuleState); return AfxGetTypeLibCache(&tlid); } \
+
+/////////////////////////////////////////////////////////////////////////////
+// Init & Term helpers
+
+BOOL AFXAPI AfxOleInit();
+void AFXAPI AfxOleTerm(BOOL bJustRevoke = FALSE);
+void AFXAPI AfxOleTermOrFreeLib(BOOL bTerm = TRUE, BOOL bJustRevoke = FALSE);
+
+/////////////////////////////////////////////////////////////////////////////
+// Memory management helpers (for OLE task allocator memory)
+
+#define AfxAllocTaskMem(nSize) CoTaskMemAlloc(nSize)
+#define AfxFreeTaskMem(p) CoTaskMemFree(p)
+
+LPWSTR AFXAPI AfxAllocTaskWideString(LPCWSTR lpszString);
+LPWSTR AFXAPI AfxAllocTaskWideString(LPCSTR lpszString);
+LPSTR AFXAPI AfxAllocTaskAnsiString(LPCWSTR lpszString);
+LPSTR AFXAPI AfxAllocTaskAnsiString(LPCSTR lpszString);
+
+#ifdef _UNICODE
+ #define AfxAllocTaskString(x) AfxAllocTaskWideString(x)
+#else
+ #define AfxAllocTaskString(x) AfxAllocTaskAnsiString(x)
+#endif
+
+#ifdef OLE2ANSI
+ #define AfxAllocTaskOleString(x) AfxAllocTaskAnsiString(x)
+#else
+ #define AfxAllocTaskOleString(x) AfxAllocTaskWideString(x)
+#endif
+
+HRESULT AFXAPI AfxGetClassIDFromString(LPCTSTR lpsz, LPCLSID lpClsID);
+
+/////////////////////////////////////////////////////////////////////////////
+// Special in-proc server APIs
+
+SCODE AFXAPI AfxDllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
+SCODE AFXAPI AfxDllCanUnloadNow(void);
+
+/////////////////////////////////////////////////////////////////////////////
+// COleVariant class helpers
+
+#define AFX_OLE_TRUE (-1)
+#define AFX_OLE_FALSE 0
+
+class CLongBinary; // forward reference (see afxdb_.h)
+
+/////////////////////////////////////////////////////////////////////////////
+// COleVariant class - wraps VARIANT types
+
+typedef const VARIANT* LPCVARIANT;
+
+class COleVariant : public tagVARIANT
+{
+// Constructors
+public:
+ COleVariant();
+
+ COleVariant(const VARIANT& varSrc);
+ COleVariant(LPCVARIANT pSrc);
+ COleVariant(const COleVariant& varSrc);
+
+ COleVariant(LPCTSTR lpszSrc);
+ COleVariant(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set to ANSI string
+ COleVariant(CString& strSrc);
+
+ COleVariant(BYTE nSrc);
+ COleVariant(short nSrc, VARTYPE vtSrc = VT_I2);
+ COleVariant(long lSrc, VARTYPE vtSrc = VT_I4);
+ COleVariant(const COleCurrency& curSrc);
+
+ COleVariant(float fltSrc);
+ COleVariant(double dblSrc);
+ COleVariant(const COleDateTime& timeSrc);
+
+ COleVariant(const CByteArray& arrSrc);
+ COleVariant(const CLongBinary& lbSrc);
+
+// Operations
+public:
+ void Clear();
+ void ChangeType(VARTYPE vartype, LPVARIANT pSrc = NULL);
+ void Attach(VARIANT& varSrc);
+ VARIANT Detach();
+
+ BOOL operator==(const VARIANT& varSrc) const;
+ BOOL operator==(LPCVARIANT pSrc) const;
+
+ const COleVariant& operator=(const VARIANT& varSrc);
+ const COleVariant& operator=(LPCVARIANT pSrc);
+ const COleVariant& operator=(const COleVariant& varSrc);
+
+ const COleVariant& operator=(const LPCTSTR lpszSrc);
+ const COleVariant& operator=(const CString& strSrc);
+
+ const COleVariant& operator=(BYTE nSrc);
+ const COleVariant& operator=(short nSrc);
+ const COleVariant& operator=(long lSrc);
+ const COleVariant& operator=(const COleCurrency& curSrc);
+
+ const COleVariant& operator=(float fltSrc);
+ const COleVariant& operator=(double dblSrc);
+ const COleVariant& operator=(const COleDateTime& dateSrc);
+
+ const COleVariant& operator=(const CByteArray& arrSrc);
+ const COleVariant& operator=(const CLongBinary& lbSrc);
+
+ void SetString(LPCTSTR lpszSrc, VARTYPE vtSrc); // used to set ANSI string
+
+ operator LPVARIANT();
+ operator LPCVARIANT() const;
+
+// Implementation
+public:
+ ~COleVariant();
+};
+
+// COleVariant diagnostics and serialization
+#ifdef _DEBUG
+CDumpContext& AFXAPI operator<<(CDumpContext& dc, COleVariant varSrc);
+#endif
+CArchive& AFXAPI operator<<(CArchive& ar, COleVariant varSrc);
+CArchive& AFXAPI operator>>(CArchive& ar, COleVariant& varSrc);
+
+// Helper for initializing VARIANT structures
+void AFXAPI AfxVariantInit(LPVARIANT pVar);
+
+/////////////////////////////////////////////////////////////////////////////
+// COleCurrency class
+
+class COleCurrency
+{
+// Constructors
+public:
+ COleCurrency();
+
+ COleCurrency(CURRENCY cySrc);
+ COleCurrency(const COleCurrency& curSrc);
+ COleCurrency(const VARIANT& varSrc);
+ COleCurrency(long nUnits, long nFractionalUnits);
+
+// Attributes
+public:
+ enum CurrencyStatus
+ {
+ valid = 0,
+ invalid = 1, // Invalid currency (overflow, div 0, etc.)
+ null = 2, // Literally has no value
+ };
+
+ CURRENCY m_cur;
+ CurrencyStatus m_status;
+
+ void SetStatus(CurrencyStatus status);
+ CurrencyStatus GetStatus() const;
+
+// Operations
+public:
+ const COleCurrency& operator=(CURRENCY cySrc);
+ const COleCurrency& operator=(const COleCurrency& curSrc);
+ const COleCurrency& operator=(const VARIANT& varSrc);
+
+ BOOL operator==(const COleCurrency& cur) const;
+ BOOL operator!=(const COleCurrency& cur) const;
+ BOOL operator<(const COleCurrency& cur) const;
+ BOOL operator>(const COleCurrency& cur) const;
+ BOOL operator<=(const COleCurrency& cur) const;
+ BOOL operator>=(const COleCurrency& cur) const;
+
+ // Currency math
+ COleCurrency operator+(const COleCurrency& cur) const;
+ COleCurrency operator-(const COleCurrency& cur) const;
+ const COleCurrency& operator+=(const COleCurrency& cur);
+ const COleCurrency& operator-=(const COleCurrency& cur);
+ COleCurrency operator-() const;
+
+ COleCurrency operator*(long nOperand) const;
+ COleCurrency operator/(long nOperand) const;
+ const COleCurrency& operator*=(long nOperand);
+ const COleCurrency& operator/=(long nOperand);
+
+ operator CURRENCY() const;
+
+ // Currency definition
+ void SetCurrency(long nUnits, long nFractionalUnits);
+ BOOL ParseCurrency(LPCTSTR lpszCurrency, DWORD dwFlags = 0,
+ LCID = LANG_USER_DEFAULT);
+
+ // formatting
+ CString Format(DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) const;
+};
+
+// COleCurrency diagnostics and serialization
+#ifdef _DEBUG
+CDumpContext& AFXAPI operator<<(CDumpContext& dc, COleCurrency curSrc);
+#endif
+CArchive& AFXAPI operator<<(CArchive& ar, COleCurrency curSrc);
+CArchive& AFXAPI operator>>(CArchive& ar, COleCurrency& curSrc);
+
+/////////////////////////////////////////////////////////////////////////////
+// COleDateTime class helpers
+
+#define AFX_OLE_DATETIME_ERROR (-1)
+
+/////////////////////////////////////////////////////////////////////////////
+// COleDateTime class
+
+class COleDateTime
+{
+// Constructors
+public:
+ static COleDateTime PASCAL GetCurrentTime();
+
+ COleDateTime();
+
+ COleDateTime(const COleDateTime& dateSrc);
+ COleDateTime(const VARIANT& varSrc);
+ COleDateTime(DATE dtSrc);
+
+ COleDateTime(time_t timeSrc);
+ COleDateTime(const SYSTEMTIME& systimeSrc);
+ COleDateTime(const FILETIME& filetimeSrc);
+
+ COleDateTime(int nYear, int nMonth, int nDay,
+ int nHour, int nMin, int nSec);
+ COleDateTime(WORD wDosDate, WORD wDosTime);
+
+// Attributes
+public:
+ enum DateTimeStatus
+ {
+ valid = 0,
+ invalid = 1, // Invalid date (out of range, etc.)
+ null = 2, // Literally has no value
+ };
+
+ DATE m_dt;
+ DateTimeStatus m_status;
+
+ void SetStatus(DateTimeStatus status);
+ DateTimeStatus GetStatus() const;
+
+ int GetYear() const;
+ int GetMonth() const; // month of year (1 = Jan)
+ int GetDay() const; // day of month (0-31)
+ int GetHour() const; // hour in day (0-23)
+ int GetMinute() const; // minute in hour (0-59)
+ int GetSecond() const; // second in minute (0-59)
+ int GetDayOfWeek() const; // 1=Sun, 2=Mon, ..., 7=Sat
+ int GetDayOfYear() const; // days since start of year, Jan 1 = 1
+
+// Operations
+public:
+ const COleDateTime& operator=(const COleDateTime& dateSrc);
+ const COleDateTime& operator=(const VARIANT& varSrc);
+ const COleDateTime& operator=(DATE dtSrc);
+
+ const COleDateTime& operator=(const time_t& timeSrc);
+ const COleDateTime& operator=(const SYSTEMTIME& systimeSrc);
+ const COleDateTime& operator=(const FILETIME& filetimeSrc);
+
+ BOOL operator==(const COleDateTime& date) const;
+ BOOL operator!=(const COleDateTime& date) const;
+ BOOL operator<(const COleDateTime& date) const;
+ BOOL operator>(const COleDateTime& date) const;
+ BOOL operator<=(const COleDateTime& date) const;
+ BOOL operator>=(const COleDateTime& date) const;
+
+ // DateTime math
+ COleDateTime operator+(const COleDateTimeSpan& dateSpan) const;
+ COleDateTime operator-(const COleDateTimeSpan& dateSpan) const;
+ const COleDateTime& operator+=(const COleDateTimeSpan dateSpan);
+ const COleDateTime& operator-=(const COleDateTimeSpan dateSpan);
+
+ // DateTimeSpan math
+ COleDateTimeSpan operator-(const COleDateTime& date) const;
+
+ operator DATE() const;
+
+ BOOL SetDateTime(int nYear, int nMonth, int nDay,
+ int nHour, int nMin, int nSec);
+ BOOL SetDate(int nYear, int nMonth, int nDay);
+ BOOL SetTime(int nHour, int nMin, int nSec);
+ BOOL ParseDateTime(LPCTSTR lpszDate, DWORD dwFlags = 0,
+ LCID lcid = LANG_USER_DEFAULT);
+
+ // formatting
+ CString Format(DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) const;
+ CString Format(LPCTSTR lpszFormat) const;
+ CString Format(UINT nFormatID) const;
+
+// Implementation
+protected:
+ void CheckRange();
+ friend COleDateTimeSpan;
+};
+
+// COleDateTime diagnostics and serialization
+#ifdef _DEBUG
+CDumpContext& AFXAPI operator<<(CDumpContext& dc, COleDateTime dateSrc);
+#endif
+CArchive& AFXAPI operator<<(CArchive& ar, COleDateTime dateSrc);
+CArchive& AFXAPI operator>>(CArchive& ar, COleDateTime& dateSrc);
+
+/////////////////////////////////////////////////////////////////////////////
+// COleDateTimeSpan class
+class COleDateTimeSpan
+{
+// Constructors
+public:
+ COleDateTimeSpan();
+
+ COleDateTimeSpan(double dblSpanSrc);
+ COleDateTimeSpan(const COleDateTimeSpan& dateSpanSrc);
+ COleDateTimeSpan(long lDays, int nHours, int nMins, int nSecs);
+
+// Attributes
+public:
+ enum DateTimeSpanStatus
+ {
+ valid = 0,
+ invalid = 1, // Invalid span (out of range, etc.)
+ null = 2, // Literally has no value
+ };
+
+ double m_span;
+ DateTimeSpanStatus m_status;
+
+ void SetStatus(DateTimeSpanStatus status);
+ DateTimeSpanStatus GetStatus() const;
+
+ double GetTotalDays() const; // span in days (about -3.65e6 to 3.65e6)
+ double GetTotalHours() const; // span in hours (about -8.77e7 to 8.77e6)
+ double GetTotalMinutes() const; // span in minutes (about -5.26e9 to 5.26e9)
+ double GetTotalSeconds() const; // span in seconds (about -3.16e11 to 3.16e11)
+
+ long GetDays() const; // component days in span
+ long GetHours() const; // component hours in span (-23 to 23)
+ long GetMinutes() const; // component minutes in span (-59 to 59)
+ long GetSeconds() const; // component seconds in span (-59 to 59)
+
+// Operations
+public:
+ const COleDateTimeSpan& operator=(double dblSpanSrc);
+ const COleDateTimeSpan& operator=(const COleDateTimeSpan& dateSpanSrc);
+
+ BOOL operator==(const COleDateTimeSpan& dateSpan) const;
+ BOOL operator!=(const COleDateTimeSpan& dateSpan) const;
+ BOOL operator<(const COleDateTimeSpan& dateSpan) const;
+ BOOL operator>(const COleDateTimeSpan& dateSpan) const;
+ BOOL operator<=(const COleDateTimeSpan& dateSpan) const;
+ BOOL operator>=(const COleDateTimeSpan& dateSpan) const;
+
+ // DateTimeSpan math
+ COleDateTimeSpan operator+(const COleDateTimeSpan& dateSpan) const;
+ COleDateTimeSpan operator-(const COleDateTimeSpan& dateSpan) const;
+ const COleDateTimeSpan& operator+=(const COleDateTimeSpan dateSpan);
+ const COleDateTimeSpan& operator-=(const COleDateTimeSpan dateSpan);
+ COleDateTimeSpan operator-() const;
+
+ operator double() const;
+
+ void SetDateTimeSpan(long lDays, int nHours, int nMins, int nSecs);
+
+ // formatting
+ CString Format(LPCTSTR pFormat) const;
+ CString Format(UINT nID) const;
+
+// Implementation
+public:
+ void CheckRange();
+ friend COleDateTime;
+};
+
+// COleDateTimeSpan diagnostics and serialization
+#ifdef _DEBUG
+CDumpContext& AFXAPI operator<<(CDumpContext& dc,COleDateTimeSpan dateSpanSrc);
+#endif
+CArchive& AFXAPI operator<<(CArchive& ar, COleDateTimeSpan dateSpanSrc);
+CArchive& AFXAPI operator>>(CArchive& ar, COleDateTimeSpan& dateSpanSrc);
+
+/////////////////////////////////////////////////////////////////////////////
+// Helper for initializing COleSafeArray
+void AFXAPI AfxSafeArrayInit(COleSafeArray* psa);
+
+/////////////////////////////////////////////////////////////////////////////
+// CSafeArray class
+
+typedef const SAFEARRAY* LPCSAFEARRAY;
+
+class COleSafeArray : public tagVARIANT
+{
+//Constructors
+public:
+ COleSafeArray();
+ COleSafeArray(const SAFEARRAY& saSrc, VARTYPE vtSrc);
+ COleSafeArray(LPCSAFEARRAY pSrc, VARTYPE vtSrc);
+ COleSafeArray(const COleSafeArray& saSrc);
+ COleSafeArray(const VARIANT& varSrc);
+ COleSafeArray(LPCVARIANT pSrc);
+ COleSafeArray(const COleVariant& varSrc);
+
+// Operations
+public:
+ void Clear();
+ void Attach(VARIANT& varSrc);
+ VARIANT Detach();
+
+ COleSafeArray& operator=(const COleSafeArray& saSrc);
+ COleSafeArray& operator=(const VARIANT& varSrc);
+ COleSafeArray& operator=(LPCVARIANT pSrc);
+ COleSafeArray& operator=(const COleVariant& varSrc);
+
+ BOOL operator==(const SAFEARRAY& saSrc) const;
+ BOOL operator==(LPCSAFEARRAY pSrc) const;
+ BOOL operator==(const COleSafeArray& saSrc) const;
+ BOOL operator==(const VARIANT& varSrc) const;
+ BOOL operator==(LPCVARIANT pSrc) const;
+ BOOL operator==(const COleVariant& varSrc) const;
+
+ operator LPVARIANT();
+ operator LPCVARIANT() const;
+
+ // One dim array helpers
+ void CreateOneDim(VARTYPE vtSrc, DWORD dwElements,
+ void* pvSrcData = NULL, long nLBound = 0);
+ DWORD GetOneDimSize();
+ void ResizeOneDim(DWORD dwElements);
+
+ // Multi dim array helpers
+ void Create(VARTYPE vtSrc, DWORD dwDims, DWORD* rgElements);
+
+ // SafeArray wrapper classes
+ void Create(VARTYPE vtSrc, DWORD dwDims, SAFEARRAYBOUND* rgsabounds);
+ void AccessData(void** ppvData);
+ void UnaccessData();
+ void AllocData();
+ void AllocDescriptor(DWORD dwDims);
+ void Copy(LPSAFEARRAY* ppsa);
+ void GetLBound(DWORD dwDim, long* pLBound);
+ void GetUBound(DWORD dwDim, long* pUBound);
+ void GetElement(long* rgIndices, void* pvData);
+ void PtrOfIndex(long* rgIndices, void** ppvData);
+ void PutElement(long* rgIndices, void* pvData);
+ void Redim(SAFEARRAYBOUND* psaboundNew);
+ void Lock();
+ void Unlock();
+ DWORD GetDim();
+ DWORD GetElemSize();
+ void Destroy();
+ void DestroyData();
+ void DestroyDescriptor();
+
+//Implementation
+public:
+ ~COleSafeArray();
+
+ // Cache info to make element access (operator []) faster
+ DWORD m_dwElementSize;
+ DWORD m_dwDims;
+};
+
+// COleSafeArray diagnostics and serialization
+#ifdef _DEBUG
+CDumpContext& AFXAPI operator<<(CDumpContext& dc, COleSafeArray saSrc);
+#endif
+CArchive& AFXAPI operator<<(CArchive& ar, COleSafeArray saSrc);
+CArchive& AFXAPI operator>>(CArchive& ar, COleSafeArray& saSrc);
+
+/////////////////////////////////////////////////////////////////////////////
+// DDX_ functions for OLE controls on dialogs
+
+#ifndef _AFX_NO_OCC_SUPPORT
+
+void AFXAPI DDX_OCText(CDataExchange* pDX, int nIDC, DISPID dispid,
+ CString& value);
+void AFXAPI DDX_OCTextRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ CString& value);
+void AFXAPI DDX_OCBool(CDataExchange* pDX, int nIDC, DISPID dispid,
+ BOOL& value);
+void AFXAPI DDX_OCBoolRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ BOOL& value);
+void AFXAPI DDX_OCInt(CDataExchange* pDX, int nIDC, DISPID dispid,
+ int &value);
+void AFXAPI DDX_OCIntRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ int &value);
+void AFXAPI DDX_OCInt(CDataExchange* pDX, int nIDC, DISPID dispid,
+ long &value);
+void AFXAPI DDX_OCIntRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ long &value);
+void AFXAPI DDX_OCShort(CDataExchange* pDX, int nIDC, DISPID dispid,
+ short& value);
+void AFXAPI DDX_OCShortRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ short& value);
+void AFXAPI DDX_OCColor(CDataExchange* pDX, int nIDC, DISPID dispid,
+ OLE_COLOR& value);
+void AFXAPI DDX_OCColorRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ OLE_COLOR& value);
+void AFXAPI DDX_OCFloat(CDataExchange* pDX, int nIDC, DISPID dispid,
+ float& value);
+void AFXAPI DDX_OCFloatRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ float& value);
+void AFXAPI DDX_OCFloat(CDataExchange* pDX, int nIDC, DISPID dispid,
+ double& value);
+void AFXAPI DDX_OCFloatRO(CDataExchange* pDX, int nIDC, DISPID dispid,
+ double& value);
+
+#endif // !_AFX_NO_OCC_SUPPORT
+
+/////////////////////////////////////////////////////////////////////////////
+// Function to enable containment of OLE controls
+
+#ifndef _AFX_NO_OCC_SUPPORT
+void AFX_CDECL AfxEnableControlContainer(COccManager* pOccManager=NULL);
+#else
+#define AfxEnableControlContainer()
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// Inline function declarations
+
+#ifdef _AFX_PACKING
+#pragma pack(pop)
+#endif
+
+#ifdef _AFX_ENABLE_INLINES
+#define _AFXDISP_INLINE inline
+#include <afxole.inl>
+#undef _AFXDISP_INLINE
+#endif
+
+#undef AFX_DATA
+#define AFX_DATA
+
+#ifdef _AFX_MINREBUILD
+#pragma component(minrebuild, on)
+#endif
+#ifndef _AFX_FULLTYPEINFO
+#pragma component(mintypeinfo, off)
+#endif
+
+#endif //__AFXDISP_H__
+
+/////////////////////////////////////////////////////////////////////////////