home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- ** _ D B D A O . H *
- ** *
- *************************************************************************
- ** Copyright (C) 1995 by Microsoft Corporation *
- ** All Rights Reserved *
- ************************************************************************/
- /*
- _DBDAO.H
-
- Internal definitions and prototypes for dbdao C++ classes
- */
- #ifndef __DBDAO_H_
- #define __DBDAO_H_
-
-
- class CdbBStr;
-
- /*****************************************************************************
- * DAO runtime key
- */
- const char szKEY[] = "mjgcqcejfchcijecpdhckcdjqigdejfccjri";
-
- /*****************************************************************************
- * Miscellaneous defines
- */
- #define DAO_MAXSEEKFIELDS 13
-
-
- /*****************************************************************************
- * CdbBSTR (OLE BSTR helper)
- */
- class DLLEXPORT CdbBSTR
- {
- public:
- CONSTRUCTOR CdbBSTR (BSTR=NULL);
- DESTRUCTOR ~CdbBSTR (VOID);
-
- operator BSTR * (VOID);
- operator LPCTSTR (VOID);
-
- private:
- BSTR m_bstr;
- };
-
- /*****************************************************************************
- * CdbVariant (OLE Variant helper)
- */
- class CdbVariant : public COleVariant
- {
- public:
- CONSTRUCTOR CdbVariant (LONG l);
- CONSTRUCTOR CdbVariant (VOID);
- CONSTRUCTOR CdbVariant (LPCTSTR pstr);
- CONSTRUCTOR CdbVariant (SHORT s, BOOL bIsBool = FALSE);
- CONSTRUCTOR CdbVariant (LPVARIANT pv);
- CONSTRUCTOR CdbVariant (LPSAFEARRAY psa);
-
- VOID operator = (LPVARIANT pv);
- VOID operator = (LPCTSTR pstr);
- VOID operator = (SHORT s);
- VOID operator = (const int i);
- VOID operator = (LONG l);
- };
-
- inline CONSTRUCTOR CdbVariant::CdbVariant(
- VOID) : COleVariant()
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
-
- inline CdbVariant::CdbVariant (LONG l)
- {
- if (l == -1)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- vt = VT_I4;
- lVal = l;
- }
- }
-
-
- inline CONSTRUCTOR CdbVariant::CdbVariant(
- LPCTSTR pstr): COleVariant(pstr,VT_BSTRT)
- {
- if (!pstr)
- {
- VariantClear(this);
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- }
-
-
- inline CONSTRUCTOR CdbVariant::CdbVariant(
- SHORT s, BOOL bIsBool) : COleVariant(s)
- {
- if (bIsBool)
- {
- vt = VT_BOOL;
- boolVal = s;
- }
- else if (s==-1)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- }
-
- inline CONSTRUCTOR CdbVariant::CdbVariant(
- LPVARIANT pv)
- {
- if (!pv)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- VariantCopy(this, pv);
- }
-
- inline CONSTRUCTOR CdbVariant::CdbVariant(
- LPSAFEARRAY psa)
- {
- if (!psa)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- vt = VT_ARRAY|VT_UI1;
- parray = psa;
- }
- }
-
- inline VOID CdbVariant::operator =(
- LPVARIANT pv)
- {
- if (!pv)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- VariantCopy(this, pv);
- }
-
- inline VOID CdbVariant::operator =(
- LPCTSTR pstr)
- {
- if (!pstr)
- {
- VariantClear(this);
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- #ifdef UNICODE
- bstrVal = SysAllocString(pstr);
- #else
- bstrVal = SysAllocStringByteLen(pstr, strlen(pstr));
- #endif
- vt = VT_BSTR;
- }
- }
-
-
- inline VOID CdbVariant::operator =(
- SHORT s)
- {
- if (s==-1)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- vt = VT_I2;
- iVal = s;
- }
- }
-
- inline VOID CdbVariant::operator =(
- const int i)
- {
- if (i==-1)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- vt = VT_I2;
- iVal = (SHORT)i;
- }
- }
-
-
- inline VOID CdbVariant::operator =(
- LONG l)
- {
- if (l==-1)
- {
- vt = VT_ERROR;
- scode = DISP_E_PARAMNOTFOUND;
- }
- else
- {
- vt = VT_I4;
- lVal = l;
- }
- }
-
-
- /*****************************************************************************
- * CdbWide
- */
- HRESULT CdbWideFromAnsi(LPSTR, unsigned int, BSTR *);
-
- class CdbWide
- {
- public:
- CONSTRUCTOR CdbWide (LPSTR pstr, unsigned int cb=0)
- {
- CdbWideFromAnsi(pstr, (pstr ? (cb==0 ? strlen(pstr) : cb) : 0), &m_bstr);
- }
- DESTRUCTOR ~CdbWide ()
- {
- SysFreeString(m_bstr);
- }
-
- operator LPWSTR ()
- {
- return (LPWSTR)m_bstr;
- }
- operator LPSTR ()
- {
- return (LPSTR)m_bstr;
- }
-
- ULONG cBytes ()
- {
- return SysStringByteLen(m_bstr);
- }
-
- private:
- BSTR m_bstr;
- };
-
- /*****************************************************************************
- * Helper macros
- */
-
- //Initialize a variant
- #define DAOVINIT(var) \
- do \
- { \
- (var).vt = VT_ERROR; \
- (var).scode = DISP_E_PARAMNOTFOUND; \
- } \
- while (0)
-
-
- // LPTSTR to VARIANT
- #define STV(pstr) CdbVariant(pstr)
-
- // LPTSTR to BSTR
- #define STB(pstr) V_BSTR(((LPVARIANT)STV(pstr)))
-
- // LONG to VARIANT
- #define LTV(l) CdbVariant(l)
-
- // Optional LONG to VARIANT
- #define OLTV(l) CdbVariant((l))
-
- // C/C++ bool to DAO bool
- #define BTB(b) ((VARIANT_BOOL)(b?-1:0))
-
- // C/C++ bool to VARIANT
- #define BTV(b) CdbVariant(BTB(b), TRUE)
-
- // C/C++ short to VARIANT
- #define SHTV(s) CdbVariant((SHORT)s)
-
- // OLE variant to VARIANT
- #define VTV(pv) CdbVariant(pv)
-
- // SAFEARRAY to VARIANT
- #define ATV(psa, var) \
- do \
- { \
- if (!psa) \
- { \
- var.vt = VT_ERROR; \
- var.scode = DISP_E_PARAMNOTFOUND; \
- } \
- else \
- { \
- var.vt = VT_ARRAY|VT_UI1; \
- var.parray = psa; \
- } \
- } \
- while (0)
-
- #if !defined(DAOMFC_DONT_THROW_EXCEPTIONS)
-
- #define DAOMFC_CALL(hr) \
- do \
- { \
- HRESULT hresult = (hr); \
- if(FAILED(hresult)) \
- { \
- TRACE0("\nDBDAO Call Failed.\n\t"); \
- TRACE2("\nIn file %s on line %d\n", _T("DBDAO.CPP"), __LINE__); \
- TRACE1("hResult = %X\n", hresult); \
- if (GetScode(hresult) == E_OUTOFMEMORY) \
- AfxThrowMemoryException(); \
- else \
- throw CdbException(hresult); \
- } \
- } while (0)
-
- #else
-
- #define DAOMFC_CALL(hr) (hr)
-
- #endif // DAOMFC_THROW_EXCEPTIONS
-
-
- /*****************************************************************************
- * Property Set/Get helper macros
- */
-
- // Get a LONG property
- #define LPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- LONG l = 0; \
- \
- DAOMFC_CALL(p->meth(&l)); \
- \
- return l; \
- } \
- while (0)
-
- // Set a LONG property
- #define LPROPSET(intDAO, meth, l) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(l)); \
- } \
- while(0)
-
- // Get a SHORT property
- #define WPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- SHORT s = 0; \
- \
- DAOMFC_CALL(p->meth(&s)); \
- \
- return s; \
- } \
- while (0)
-
- // Set a SHORT property
- #define WPROPSET(intDAO, meth, s) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(s)); \
- } \
- while(0)
-
- // Get a STRING property
- #define SPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- CdbBSTR bstr; \
- \
- DAOMFC_CALL(p->meth(bstr)); \
- \
- return bstr; \
- } \
- while (0)
-
- // Set a STRING property
- #define SPROPSET(intDAO, meth, s) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(STB(s))); \
- } \
- while(0)
-
- // Get a DATETIME property
- #define DPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- VARIANT Var; \
- \
- VariantInit(&Var); \
- DAOMFC_CALL(p->meth(&Var)); \
- return Var; \
- } \
- while (0)
-
- // Set a DATETIME property
- #define DPROPSET(intDAO, meth, pv) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(*pv)); \
- } \
- while(0)
-
- // Get a BOOLEAN property
- #define BPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- VARIANT_BOOL vb = 0; \
- \
- DAOMFC_CALL(p->meth(&vb)); \
- \
- return (BOOL)vb; \
- } \
- while (0)
-
- // Set a BOOLEAN property
- #define BPROPSET(intDAO, meth, b) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(BTB(b))); \
- } \
- while(0)
-
- // Get a VARIANT property
- #define VPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- COleVariant v; \
- \
- VariantInit(&v); \
- DAOMFC_CALL(p->meth(&v)); \
- \
- return &v; \
- } \
- while (0)
-
- // Set a VARIANT property
- #define VPROPSET(intDAO, meth, pv) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- \
- DAOMFC_CALL(p->meth(*pv)); \
- } \
- while(0)
-
- // Get a DWORD property
- #define DWPROPGET(intDAO, meth) \
- do \
- { \
- intDAO * p = (intDAO *)GetInterface(); \
- DWORD dw = 0; \
- \
- DAOMFC_CALL(p->meth(&dw)); \
- \
- return dw; \
- } \
- while (0)
-
-
- #define DAOMFC_STATIC_COLLECTION_IMPL(objColl, objSingle, intColl, intSingle) \
- objSingle objColl::Item (LONG i) { return (intSingle *)(ObItem(i).GetInterface(TRUE)); } \
- objSingle objColl::Item (LPCTSTR pstr) { return (intSingle *)(ObItem(pstr).GetInterface(TRUE)); } \
- objSingle objColl::operator[] (LONG i) { return (intSingle *)(Item(i).GetInterface(TRUE)); } \
- objSingle objColl::operator[] (LPCTSTR pstr) { return (intSingle *)(Item(pstr).GetInterface(TRUE)); }
-
- #define DAOMFC_DYNAMIC_COLLECTION_IMPL(objColl, objSingle, intColl, intSingle) \
- objSingle objColl::Item (LONG i) { return (intSingle *)(ObItem(i).GetInterface(TRUE)); } \
- objSingle objColl::Item (LPCTSTR pstr) { return (intSingle *)(ObItem(pstr).GetInterface(TRUE)); } \
- VOID objColl::Append (objSingle &o) { ObAppend(o); } \
- objSingle objColl::operator[] (LONG i) { return (intSingle *)(Item(i).GetInterface(TRUE)); } \
- objSingle objColl::operator[] (LPCTSTR pstr) { return (intSingle *)(Item(pstr).GetInterface(TRUE)); }
-
- DECLARE_INTERFACE_(DAOMFCSCollection, _DAOCollection)
- {
- STDMETHOD(get_Item) (VARIANT index, LPUNKNOWN *ppunk);
- };
-
- DECLARE_INTERFACE_(DAOMFCDCollection, _DAODynaCollection)
- {
- STDMETHOD(get_Item) (VARIANT index, LPUNKNOWN *ppunk);
- };
-
-
- #endif // __DBDAO_H_
-