200分!(不过不知道怎么给200分)如何用ATL实现类ADO的对象树?比如通过 A.B.C 来访问一个对象?

coinicon 2004-08-04 12:31:44
如何用ATL实现类ADO的对象树?

此问题包括两个方面内容:

1。如何通过一个接口 A 访问另一个接口 B,且只能通过 A 访问,从表现上来看,B 为 A 在对象树中的子节点?

2。如何实现对象(非基本数据类型)的集合、枚举?比如ADO中的Fields,RecordSets等。

两个问题各100分!
...全文
80 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jim3000 2004-08-07
  • 打赏
  • 举报
回复
做这种集合类很常见的,很简单,你看看书就明白了。
假如你实现了一个点组件(CPoint,接口为IPoint),想实现一个点集合组件(CPoints,接口为IPoints),可以这样做:

在Points.h文件里定义一个点的数组类
typedef std::vector<ISPoint*> VecPoints;

在CPoints中定义成员变量,用于保存点接口
VecPoints m_vecPoints;

在IPoints接口中实现几个基本的方法和属性:
Add([in]IPoint* pPoint); //增加一个新点,引用记数+1
Remove([in]long Index); //删除指定的点,引用记数-1
Count([out, retval] long *pVal);//取的点的个数
Item([in]long Index, [out, retval] IPoint* *pVal);//返回指定的项,引用记数+1
RemoveAll();//所有的引用记数-1

要注意引用记数的增加和释放!!在FinalRelease()中要调用RemoveAll()


coinicon 2004-08-07
  • 打赏
  • 举报
回复
非常感谢两位!

-------------------
mg1616(内网网站:neweb.dhcn.net) :
只能通过 A 访问 B 恐怕不可能

例如Office程序的对象,一般都是以Application为对象树的根,其他对象只能通过Application访问或创建,如何类似实现呢?

-------------------
jim3000(jim):
2.定义这个对象的集合接口并实现,定义枚举类型在接口中直接应用

有无具体例子提供呢?我就是卡在实现对象集合的问题上了,写的代码可能不对,编译都通不过。

=========
再次感谢二位!!
coinicon 2004-08-07
  • 打赏
  • 举报
回复
谢谢!

对于集合对象,必须实现的方法、属性有Count、Item、_NewEnum,对于Count、Item以及附加的Add,Remove,RemoveAll等方法,实现应该不难,但对于_NewEnum,则有些困难,因_NewEnum得到的IEnumVARIANT必须实现Clone等方法。

jim3000(jim)的实现,需要自己手动写较多代码,且容易出错,而ATL框架中提供了辅助类,如ICollectionOnSTLImpl,_Copy,_CopyInterface,我的意思是,如何利用这些辅助类在ATL的框架内快速简洁地实现对象集合?

还望jim3000(jim)不奢指教。
jim3000 2004-08-06
  • 打赏
  • 举报
回复
这是ATL很基本的问题了,所以高手懒得回答。
1.将B以包容或聚合的方式在A中实现,将C以包容或聚合的方式在B中实现
2.定义这个对象的集合接口并实现,定义枚举类型在接口中直接应用
mg1616 2004-08-06
  • 打赏
  • 举报
回复
1。在接口A之前声明接口B,A的属性类型为接口B,但只能通过 A 访问 B 恐怕不可能。

2。对象集合应该是接口属性加参数,作为对象的索引值,比如A.B[1],或者A.B["ID"],枚举就有待研究了
coinicon 2004-08-06
  • 打赏
  • 举报
回复
没人回答,难道csdn的高手都不上网了吗?
目 录 第1篇 基础篇 第1章 数据库原理与访问. 2 1.1 数据库基本原理... 2 1.1.1 概述... 2 1.1.2 桌面数据库... 3 1.1.3 对象数据库... 3 1.1.4 关系数据库服务器... 5 1.1.5 选择适用的数据库... 5 1.2 数据库访问技术... 6 1.2.1 概述... 6 1.2.2 ODBC API 7 1.2.3 ODBC的MFC... 7 1.2.4 DAO与RDO.. 8 1.2.5 OLE DB与ADO.. 9 1.3 数据库操纵语言SQL. 10 1.3.1 SQL命令... 10 1.3.2 SQL从句... 11 1.3.3 SQL运算符... 11 1.3.4 SQL合计函数... 11 1.4 小结... 12 第2章 COM与数据库访问. 13 2.1 COM的基本原理... 13 2.1.1 COM历史... 13 2.1.2 COM结构... 14 2.1.3 COM优势... 15 2.1.4 COM接口... 16 2.1.5 COM与数据库访问... 17 2.1.6 COM与Internet 17 2.2 ActiveX的数据库访问... 18 2.2.1 ActiveX简介... 18 2.2.2 ActiveX对数据库访问的支持... 18 2.3 ATL的数据库访问... 19 2.3.1 ATL目标... 19 2.3.2 ATL内容简介... 21 2.3.3 ATL对数据库访问的支持... 22 2.4 小结... 22 第3章 数据库开发过程. 23 3.1 阶段1:调查与析... 23 3.2 阶段2:数据建模... 24 3.3 阶段3:功能设计... 24 3.4 阶段4:选择数据库系统... 25 3.5 阶段5:选择数据库访问技术... 25 3.6 阶段6:代码设计... 26 3.7 阶段7:测试与调试... 26 3.8 阶段8:发行产品... 26 第4章 VC++数据库开发基础. 27 4.1 VC++ 6.0工程创建向导... 27 4.2 VC++ 6.0数据库新建工具... 27 4.3 VC++ 6.0的数据库工程... 30 4.4 小结... 33 第2篇 实例篇 第5章 ODBC API编程. 35 5.1 了解ODBC API 35 5.2 ODBC API编程步骤... 36 5.2.1 步骤1:连接数据源... 36 5.2.2 步骤2:配语句句柄... 38 5.2.3 步骤3:准备并执行SQL语句... 38 5.2.4 步骤4:获取结果集... 39 5.2.5 步骤5:提交事务... 41 5.2.6 步骤6:断开数据源连接并释放 环境句柄... 41 5.3 ODBC API编程实例... 41 5.3.1 实例概述... 41 5.3.2 实例实现过程... 42 5.3.3 编译并运行ODBCDemo1工程... 109 5.3.4 ODBCDemo1实例小结... 111 5.4 本章小结... 111 第6章 MFC ODBC编程. 112 6.1 了解MFC ODBC.. 112 6.1.1 CDatabase... 112 6.1.2 CRecordSet... 112 6.2 MFC ODBC数据库访问技术... 113 6.2.1 记录查询... 113 6.2.2 记录添加... 114 6.2.3 记录删除... 115 6.2.4 记录修改... 115 6.2.5 撤销数据库更新操作... 115 6.2.6 直接执行SQL语句... 115 6.2.7 MFC ODBC的数据库操作过程... 116 6.3 MFC ODBC编程实例... 116 6.3.1 实例概述... 116 6.3.2 实例实现过程... 117 6.3.3 编译并运行ODBCDemo2工程... 149 6.3.4 ODBCDemo2实例小结... 154 6.4 本章小结... 155 第7章 DAO数据库编程. 155 7.1 DAO的数据访问... 155 7.1.1 DAO对象... 155 7.1.2 MFC对DAO的支持... 156 7.1.3 DAO与ODBC的比较... 156 7.1.4 MFC的DAO简介... 157 7.2 DAO编程实例... 160 7.2.1 实例概述... 160 7.2.2 实例实现过程... 161 7.2.3 运行DAODemo工程... 188 7.2.4 DAODemo实例小结... 193 7.3 小结... 193 第8章 OLE DB客户数据库编程. 194 8.1 OLE DB原理... 194 8.1.1 OLE DB与ODBC.. 194 8.1.2 OLE DB的结构... 194 8.1.3 OLE DB的优越性... 195 8.1.4 OLE DB对象... 195 8.1.5 OLE DB客户模板结构... 199 8.1.6 OLE DB客户模板... 199 8.2 OLE DB客户数据库访问的两种途径.... 202 8.2.1 以MFC AppWizard(exe)为向导 建立OLE DB客户程序框架... 202 8.2.2 以ATL COM AppWizard为向导 建立OLE DB客户程序框架... 212 8.3 OLE DB客户应用程序编程实例... 217 8.3.1 实例概述... 217 8.3.2 实例实现过程... 218 8.3.3 编译并运行工程... 256 8.3.4 OLEDB_MFC实例小结... 261 8.4 小结... 261 第3篇 高级话题 第9章 ADO客户数据库编程. 262 9.1 ADO原理... 262 9.1.1 ADO与OLE DB.. 262 9.1.2 ADO的优越性... 263 9.1.3 ADO对象模型... 263 9.1.4 ADO编程... 266 9.2 ADO的数据库访问规范... 266 9.3 ADO数据库编程实例... 267 9.3.1 实例概述... 267 9.3.2 实例实现过程... 268 9.3.3 运行ADODemo工程... 299 9.3.4 ADODemo实例小结... 302 9.4 小结... 303 第10章 开发ADO数据库组件. 304 10.1 ADO组件概述... 304 10.1.1 COM组件原理... 304 10.1.2 ADO组件模型... 304 10.1.3 ADO组件同客户程序的协作... 306 10.2 ADO数据库组件开发实例... 307 10.2.1 实例概述... 307 10.2.2 实例实现过程... 307 10.2.3 编译工程... 327 10.3 编写组件的客户程序... 328 10.3.1 创建客户程序... 329 10.3.2 设计客户程序的界面... 330 10.3.3 编写测试代码... 330 10.3.4 ADOAccessor实例小结... 332 10.4 小结... 332 附录A 数据库访问的错误代码.............. 333 附录B 数据库编程资源网站........ 339 附录C 光盘内容.................. 340

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧