下列头文件 (icrsint.h) 详细说明了允许客户提取一行数据并直接送至类数据成员的接口。客户程序需要在其类中包含绑定条目,以指定 Recordset Field 对象和类数据成员之间的关联。
#ifndef _ICRSINT_H_ #define _ICRSINT_H_#include <olectl.h> #include <stddef.h>// forwards class CADORecordBinding;#define classoffset(base, derived) \ ((DWORD)(static_cast<base*>((derived*)8))-8)enum FieldStatusEnum { adFldOK = 0, adFldBadAccessor = 1, adFldCantConvertValue = 2, adFldNull = 3, adFldTruncated = 4, adFldSignMismatch = 5, adFldDataOverFlow = 6, adFldCantCreate = 7, adFldUnavailable = 8, adFldPermissionDenied = 9, adFldIntegrityViolation = 10, adFldSchemaViolation = 11, adFldBadStatus = 12, adFldDefault = 13 };typedef struct stADO_BINDING_ENTRY { ULONG ulOrdinal; WORD wDataType; BYTE bPrecision; BYTE bScale; ULONG ulSize; ULONG ulOffSet; ULONG ulIADOBindingEntriesOffSet; ULONG ulFldStatusOffset; BOOL fModify; } ADO_BINDING_ENTRY;#define BEGIN_ADO_BINDING(cls) public: \ typedef cls ADORowClass; \ const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \ static const ADO_BINDING_ENTRY rgADOBindingEntries[] = { #define ADO_FIXED_LENGTH_BINDING_ENTRY(Ordinal, DataType, Buffer, \ Status, Modify)\ {Ordinal, \ DataType, \ 0, \ 0, \ 0, \ offsetof(ADORowClass, Buffer), \ classoffset(CADORecordBinding, ADORowClass), \ offsetof(ADORowClass, Status), \ Modify},#define ADO_NUMERIC_BINDING_ENTRY(Ordinal, DataType, \ Buffer, Precision, Scale, Status, Modify)\ {Ordinal, \ DataType, \ Precision, \ Scale, \ 0, \ offsetof(ADORowClass, Buffer), \ classoffset(CADORecordBinding, ADORowClass), \ offsetof(ADORowClass, Status), \ Modify},#define ADO_VARIABLE_LENGTH_BINDING_ENTRY(Ordinal, DataType, \ Buffer, Size, Status, Modify)\ {Ordinal, \ DataType, \ 0, \ 0, \ Size, \ offsetof(ADORowClass, Buffer), \ classoffset(CADORecordBinding, ADORowClass), \ offsetof(ADORowClass, Status), \ Modify},#define END_ADO_BINDING() {0, adEmpty, 0, 0, 0, 0, 0, adFldOK, FALSE}};\ return rgADOBindingEntries;}// // 客户端“record”类需要支持的接口。 // ADO 绑定条目提供执行该接口。 // class CADORecordBinding { public: STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries) (VOID) PURE; };// // 接口允许客户程序获取数据记录并传递给类数据成员。 // DEFINE_GUID(IID_IADORecordBinding, 0x00000544, 0, 0x10, 0x80,0,0,0xAA,0,0x6D,0x2E,0xA4); DECLARE_INTERFACE_(IADORecordBinding, IUnknown) { public: STDMETHOD(BindToRecordset)(CADORecordBinding *pAdoRecordBinding)PURE; STDMETHOD(AddNew)(CADORecordBinding *pAdoRecordBinding) PURE; STDMETHOD(Update)(CADORecordBinding *pAdoRecordBinding) PURE; };#endif // !_ICRSINT_H_