第一次作业

作业要求:

1. 请选课的同学每人挑一个练习

2. 4月底之前交给王刚:wanggang@icst.pku.edu.cn

3. 提交内容:

n     练习的代码以及有关的文件,要保证作业老师能够重新生成可执行代码。(打成一个zip包)

n     完整的练习报告。注意,请提交电子文档,并且对于多人合作的题目,重点写自己做的部分工作。

4. 如有不清楚的地方,请通过email联系

 

 试验报告样本文件下载:report-temp.doc

 

说明:如果选择了练习11或者12,那么这些同学不用再做第二次作业。请这些同学自己形成实验小组。

练习1

题目:

实现任意数制间的转换,数制表达形式自定

要求:

做成一个进程内COM组件,客户通过自定义接口调用其功能

提交:

组件程序所有代码,以及测试用的客户代码

注意:

可以使用MFC、ATL,也可以不用

要点:实现自定义的COM接口

 

练习2

题目:

实现1950-2050年间公历与农历的相互转换

要求:

做成一个进程内COM组件,客户通过自定义接口调用其功能

提交:

组件程序所有代码,以及测试用的客户代码

注意:

可以使用MFC、ATL,也可以不用

要点:实现自定义的COM接口

练习3

题目:

在“COM原理与应用”第三章例子的基础上,实现一个新的对象,要求以包容方式实现接口ICheckSpellEx,它包含一个方法,返回一个首字母大写、其余字母小写的单词

要求:

做成一个进程内COM组件,客户通过自定义接口调用其功能

提交:

组件程序所有代码,以及测试用的客户代码

注意:

可以使用MFC、ATL,也可以不用

要点:

以包容方式实现COM对象,这个组件对象既是对象,也是另一个对象的客户

 

 

练习4

题目:

把“COM原理与应用”第三章的例子改成用ATL来实现。

要求:

组件的接口和CLSID不变,用第三章的客户仍然能够调用字典组件的功能。

提交:

组件程序所有代码

要点:练习使用ATL的基本功能

 

练习5

题目:

在VB中实现一个COM对象,在VC中调用该对象

对象的功能:接受一个日期(年、月、日),算出它是星期几

要求:

客户程序不准使用MFC/ATL的包装类

提交:

组件程序和客户程序的所有代码

要点:通过COM实现VB与VC的协作

 

练习6

题目:

把“COM原理与应用”第三章的例子改造成一个自动化对象,重新定义IDictionary为双接口,只实现该接口即可。在VBA(Word或Excel)中调用该对象。

要求:

接口的IID必须改变,在VC中实现双接口时可以用ATL,也可以完全不用类库。

提交:

组件程序所有代码以及VBA中的代码

要点:实现双接口

 

练习7

题目:

实现一个进程外COM对象,它实现一个自定义接口(不是双接口),该接口有一项功能:GetPrimers,接受一个整数参数,返回一个数组,其中包含所有小于该整数的素数。

要求:

不准用MFC/ATL

要求做成一个console工程

输出参数是个不定长度的数组,一种做法是加一个长度指示;另一种做法是利用一个枚举器。建议使用枚举器。

提交:

组件程序、proxy/stub程序、客户测试程序

要点:

实现进程外组件的全过程。

 

练习8

题目:

给出一篇文章,请实现文中的应用。at_script.doc

要求:

实现一个对话框应用,用户通过一段脚本控制应用中的日历对象。

要点:了解用COM实现的脚本技术。

练习9

题目:

在一个Exe程序中,创建两个线程,至少一个是STA线程。然后在第二个线程中创建一个COM对象,通过marshaling机制,把对象的接口指针传到第一个线程中,输出这两个接口指针的值。

要求:

提交exe程序的代码,并给出试验结果。

要点:加强在套间之间传递接口指针的marshaling概念

 

练习10

题目:

改写“COM原理与应用”第三章例子中的register模块,包括register.cpp和register.h,使它成为通用的模块,既支持InprocServer,也支持LocalServer,还支持typelib以及Category(可选)。

要求:

通过测试。可以修改该书第三、四章的例子作为测试,也可以自拟方案。

要点:

了解COM注册表的结构,以及注册表对于COM的意义,并熟悉注册表的编程。

练习11

题目:

在linux下实现一个轻量级的com库,只支持进程内组件对象的创建和管理,并在此基础上,把进程内字典组件移植到linux上,移植过程中,尽可能保持客户代码和组件代码不变。

要求:

模拟注册表功能。创建对象的支持。可以不支持套间、marshaling、多线程等功能。

如果有可能,支持进程外组件的创建和通信。

2-3人完成一组。如果支持跨进程创建和通信,则需要5人左右。

要点:

了解COM的内部机制。

练习12

题目:

Essential COM”的附录给出了一个基于COM的chat程序。以此为基础,实现并调试该程序。COMChat.zip

要求:

2人一组。写出该程序的分析报告,以及程序的配置过程和测试过程。

要点:

了解DCOM的工作过程。