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

📄 mydataobject.h

📁 The ATL OLE DB Provider templates only seem to support read-only rowsets and making them support upd
💻 H
字号:
// MyDataObject.h : Declaration of the CMyDataObject

#ifndef __MYDATAOBJECT_H_
#define __MYDATAOBJECT_H_

#include "resource.h"       // main symbols
#include "SimpleDataObject.h"
#include "IGetAsADORecordsetImpl.h"
#include "IGetAsOLEDBRowsetImpl.h"

class CDataObjectRowset;

/////////////////////////////////////////////////////////////////////////////
// CMyDataObject
class ATL_NO_VTABLE CMyDataObject : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CMyDataObject, &CLSID_MyDataObject>,
   public IMyDataObject,
   public IGetAsADORecordsetImpl<CMyDataObject>,
   public IGetAsOLEDBRowsetImpl<CMyDataObject>
{
public:

   friend class CDataObjectRowset;

	CMyDataObject();
   ~CMyDataObject();

DECLARE_REGISTRY_RESOURCEID(IDR_MYDATAOBJECT)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CMyDataObject)
	COM_INTERFACE_ENTRY(IMyDataObject)
   COM_INTERFACE_ENTRY(_IGetAsOLEDBRowset)
   COM_INTERFACE_ENTRY_CHAIN(IGetAsADORecordsetImpl<CMyDataObject>)
END_COM_MAP()

// IMyDataObject
public:

   STDMETHOD(SetColumnSize)(
      /* [in] */ long columnSize);

   STDMETHOD(AddColumn)(
		/* [in] */ BSTR columnName, 
		/* [out, retval] */ long *index);
		
   STDMETHOD (GetColumnName)(
      /* [in] */ long index,
		/*	[out, retval] */ BSTR *columnName);

   STDMETHOD(AddRow)(
      /* [out, retval] */ long *index);
		
   STDMETHOD(RemoveRow)(
      /* [in] */ long index);
		
   STDMETHOD(Depth)(
      /* [out, retval] */ long *depth);

   STDMETHOD(Width)(
      /* [out, retval] */ long *width);

   STDMETHOD(SetAt)(
      /* [in] */ long rowIndex, 
		/*	[in] */ long columnIndex, 
		/*	[in] */ BSTR value);

   STDMETHOD(GetAt)(
      /* [in] */ long rowIndex, 
      /* [in] */ long columnIndex, 
      /* [out, retval] */ BSTR *value);



   STDMETHOD(AsRowset)(
      /* [in] */ IUnknown *pUnkCreator,
      /* [in] */ IUnknown *pUnkOuter,	
	   /* [in] */ REFIID riid,				
      /* [out] */ LONG *pcRowsAffected,					
	   /* [out, iid_is(riid)] */ IUnknown **ppRowset);

   long AddRow();


private :

   size_t m_numCols;             
   size_t m_numRows;
   size_t m_allocatedRows;
   size_t m_rowSize;
   size_t m_columnSize;

   CSimpleValArray<char *> m_columnNames;

   char *m_pData;


   char *GetAt(
      const size_t row, 
      const size_t col);

   void SetAt(
      const size_t row, 
      const size_t col, 
      const char *const pNewData,
      const size_t length);

   char *CreateTable();

   bool CheckRowAndColumnValid(
      const size_t row, 
      const size_t column);

   bool CheckRowValid(const size_t row);
   bool CheckColumnValid(const size_t column);
};

#endif //__MYDATAOBJECT_H_

⌨️ 快捷键说明

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