⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcdmaccessdb.h

📁 《Windows CE 权威指南》(作者:(美)CHRIS MUENCH
💻 H
字号:
// PCDMAccessDB.h : Declaration of the CPCDMAccessDB

#ifndef __PCDMACCESSDB_H_
#define __PCDMACCESSDB_H_

#include "resource.h"       // main symbols

// <BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************
#include <comdef.h>
// <BOOK_ADDON_STEP6 Chapter 9.2.3> **************************************************
#ifndef UNDER_CE
#include <rapi.h>
#include <adoint.h>
typedef Field		Field20;
#else
// </BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
#include <adoce30.h>

#ifndef __IADOCEField_INTERFACE_DEFINED__
#define __IADOCEField_INTERFACE_DEFINED__

/****************************************
 * Generated header for interface: IADOCEField
 * at Fri Feb 27 14:49:21 1998
 * using MIDL 3.01.75
 ****************************************/
/* [unique][dual][uuid][object] */ 
EXTERN_C const IID IID_IADOCEField;

#if defined(__cplusplus) && !defined(CINTERFACE)
    
    interface DECLSPEC_UUID("4BEB93D7-28D8-11D1-8321-00A024A88110")
    Field20 : public IDispatch
    {
    public:
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_ActualSize( 
            /* [retval][out] */ long __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Attributes( 
            /* [retval][out] */ long __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_DefinedSize( 
            /* [retval][out] */ long __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Name( 
            /* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Type( 
            /* [retval][out] */ DataTypeEnum __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_UnderlyingValue( 
            /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Value( 
            /* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0;
        
        virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Value( 
            /* [in] */ VARIANT newVal) = 0;
        
    };
    
#else 	/* C style interface */

    typedef struct IADOCEFieldVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( 
            IADOCEField __RPC_FAR * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
        
        ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( 
            IADOCEField __RPC_FAR * This);
        
        ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( 
            IADOCEField __RPC_FAR * This);
        
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )( 
            IADOCEField __RPC_FAR * This,
            /* [out] */ UINT __RPC_FAR *pctinfo);
        
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )( 
            IADOCEField __RPC_FAR * This,
            /* [in] */ UINT iTInfo,
            /* [in] */ LCID lcid,
            /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
        
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )( 
            IADOCEField __RPC_FAR * This,
            /* [in] */ REFIID riid,
            /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
            /* [in] */ UINT cNames,
            /* [in] */ LCID lcid,
            /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
        
        /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )( 
            IADOCEField __RPC_FAR * This,
            /* [in] */ DISPID dispIdMember,
            /* [in] */ REFIID riid,
            /* [in] */ LCID lcid,
            /* [in] */ WORD wFlags,
            /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
            /* [out] */ VARIANT __RPC_FAR *pVarResult,
            /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
            /* [out] */ UINT __RPC_FAR *puArgErr);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ActualSize )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ long __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Attributes )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ long __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DefinedSize )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ long __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ BSTR __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Type )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ DataTypeEnum __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_UnderlyingValue )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ VARIANT __RPC_FAR *pVal);
        
        /* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Value )( 
            IADOCEField __RPC_FAR * This,
            /* [retval][out] */ VARIANT __RPC_FAR *pVal);
        
        /* [id][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Value )( 
            IADOCEField __RPC_FAR * This,
            /* [in] */ VARIANT newVal);
        
        END_INTERFACE
    } IADOCEFieldVtbl;

    interface IADOCEField
    {
        CONST_VTBL struct IADOCEFieldVtbl __RPC_FAR *lpVtbl;
    };

    

#ifdef COBJMACROS


#define IADOCEField_QueryInterface(This,riid,ppvObject)	\
    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)

#define IADOCEField_AddRef(This)	\
    (This)->lpVtbl -> AddRef(This)

#define IADOCEField_Release(This)	\
    (This)->lpVtbl -> Release(This)


#define IADOCEField_GetTypeInfoCount(This,pctinfo)	\
    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)

#define IADOCEField_GetTypeInfo(This,iTInfo,lcid,ppTInfo)	\
    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)

#define IADOCEField_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)	\
    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)

#define IADOCEField_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)	\
    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)


#define IADOCEField_get_ActualSize(This,pVal)	\
    (This)->lpVtbl -> get_ActualSize(This,pVal)

#define IADOCEField_get_Attributes(This,pVal)	\
    (This)->lpVtbl -> get_Attributes(This,pVal)

#define IADOCEField_get_DefinedSize(This,pVal)	\
    (This)->lpVtbl -> get_DefinedSize(This,pVal)

#define IADOCEField_get_Name(This,pVal)	\
    (This)->lpVtbl -> get_Name(This,pVal)

#define IADOCEField_get_Type(This,pVal)	\
    (This)->lpVtbl -> get_Type(This,pVal)

#define IADOCEField_get_UnderlyingValue(This,pVal)	\
    (This)->lpVtbl -> get_UnderlyingValue(This,pVal)

#define IADOCEField_get_Value(This,pVal)	\
    (This)->lpVtbl -> get_Value(This,pVal)

#define IADOCEField_put_Value(This,newVal)	\
    (This)->lpVtbl -> put_Value(This,newVal)

#endif /* COBJMACROS */


#endif 	/* C style interface */



/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_ActualSize_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ long __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_ActualSize_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Attributes_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ long __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_Attributes_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_DefinedSize_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ long __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_DefinedSize_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Name_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ BSTR __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_Name_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Type_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ DataTypeEnum __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_Type_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_UnderlyingValue_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ VARIANT __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_UnderlyingValue_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Value_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [retval][out] */ VARIANT __RPC_FAR *pVal);


void __RPC_STUB IADOCEField_get_Value_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);


/* [id][propput] */ HRESULT STDMETHODCALLTYPE IADOCEField_put_Value_Proxy( 
    IADOCEField __RPC_FAR * This,
    /* [in] */ VARIANT newVal);

void __RPC_STUB IADOCEField_put_Value_Stub(
    IRpcStubBuffer *This,
    IRpcChannelBuffer *_pRpcChannelBuffer,
    PRPC_MESSAGE _pRpcMessage,
    DWORD *_pdwStubPhase);

#endif 	/* __IADOCEField_INTERFACE_DEFINED__ */
#endif // UNDERCE

#define	PCDMADO_NONE	0
#define PCDMADO_OLEDB	1
#define	PCDMADO_V2		2
#define	PCDMADO_V3		3
// </BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************


/////////////////////////////////////////////////////////////////////////////
// CPCDMAccessDB
class ATL_NO_VTABLE CPCDMAccessDB : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CPCDMAccessDB, &CLSID_PCDMAccessDB>,
	public IDispatchImpl<IPCDMAccessDB, &IID_IPCDMAccessDB, &LIBID_PCDMDLLLib>
{
public:
	CPCDMAccessDB()
	{
// <BOOK ADDON STEP4 Chapter 8.3.3> **************************************************
//#ifdef UNDER_CE		// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
		m_curRec=0;
		m_rFields=NULL;
//#endif		// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
		m_wfldCnt=0;
		m_rfldCnt=0;
		m_SortCnt=0;
		m_dwIndex=0;
		VariantInit(&m_ActPID);
// <BOOK ADDON STEP4 Chapter 8.3.3> **************************************************

// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
//#ifdef UNDER_CE	// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
		CLSID tClsid;
		HRESULT hr;
		m_RS=NULL;
		const IID IID__Recordset = {0x113033F6,0xF682,0x11D2,{0xBB,0x62,0x00,0xC0,0x4F,0x68,0x0A,0xCC}};
		// <BOOK Necessary due to Compatibility Wrapper in ADOCE30.h>
		const IID IID__Recordset20 =    {0x4BEB93D5,0x28D8,0x11D1,{0x83,0x21,0x00,0xA0,0x24,0xA8,0x81,0x10}};
		// </BOOK Necessary due to Compatibility Wrapper in ADOCE30.h>
		TCHAR tsADOCE30RSProgID[]= TEXT("ADOCE.Recordset.3.0");
		TCHAR tsADOCE20RSProgID[]= TEXT("ADOCE.Recordset.1");

		hr = CLSIDFromProgID( tsADOCE30RSProgID, &tClsid );
		if (!FAILED(hr))
		{	// ADOCE3.0 found !!
			hr=CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER, 
								IID__Recordset,(LPVOID *)&m_RS);
			m_useADO=PCDMADO_V3;
		}
		else
		{	// Is at ADOCE2.0 there ?
			hr=CLSIDFromProgID( tsADOCE20RSProgID, &tClsid );
			if (!FAILED(hr))
			{
				hr=CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER, 
									IID__Recordset20 ,(LPVOID *)&m_RS);
				m_useADO=PCDMADO_V2;
			}
		}
		if (FAILED(hr)) m_useADO=PCDMADO_NONE;
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************

// <BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
#ifndef UNDER_CE
      CeRapiInit ();
#endif
// </BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
	}
// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
	~CPCDMAccessDB()
	{
		CloseTable(0L);
//#ifdef UNDER_CE
		if (m_RS!=NULL)
			m_RS->Release();
//#endif
	}
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************

DECLARE_REGISTRY_RESOURCEID(IDR_PCDMACCESSDB)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CPCDMAccessDB)
	COM_INTERFACE_ENTRY(IPCDMAccessDB)
	COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

// IPCDMAccessDB
public:
	STDMETHOD(Execute)(BSTR FileLocation, BSTR Command);
	STDMETHOD(GetValue)(VARIANT PID, /*[out, retval]*/ VARIANT *Value);
	STDMETHOD(ReadRecord)(long DBHandle, /*[out,retval]*/ long * Count);
	STDMETHOD(WriteRecord)(long DBHandle);
	STDMETHOD(SetValue)(VARIANT PID, VARIANT Value);
	STDMETHOD(AddNewRecord)(long Handle);
	STDMETHOD(FindRecord)(long Handle,VARIANT PID, VARIANT Value);
	STDMETHOD(MovePrevious)(long Handle);
	STDMETHOD(MoveNext)(long Handle);
	STDMETHOD(MoveLast)(long Handle);
	STDMETHOD(MoveFirst)(long Handle);
	STDMETHOD(CloseTable)(long Handle);
	STDMETHOD(OpenTable)(BSTR FileLocation, BSTR Name, VARIANT PID, /*[out,retval]*/ long * Handle);
	STDMETHOD(CreateTable)(BSTR FileLocation, BSTR Name);
	STDMETHOD(AddProperty)(VARIANT PID, long Sorted);

// <BOOK_ADDON STEP4 Chapter 8.3.3> ******************************************
private:
//#ifdef UNDER_CE	// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
	SORTORDERSPEC	m_DBSortOrder[10];	
	CEOID			m_curRec;
	CEPROPVAL 		m_wFields[10];
	CEPROPVAL		*m_rFields;
//#endif			// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
	BSTR			m_BStr[10];	
	VARIANT			m_ActPID;
	WORD			m_SortCnt;
	DWORD			m_dwIndex;
	WORD	  	    m_rfldCnt,m_wfldCnt;
// <BOOK_ADDON STEP4 Chapter 8.3.3> ******************************************
// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
	WORD			m_useADO;
//#ifdef UNDER_CE	// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
	_Recordset		*m_RS;
//#endif			// <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
};

#endif //__PCDMACCESSDB_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -