COM实验报告.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
--Shine Chen 1 进程内 COM 组件的实现 1 实验目的 Microsoft 的 COM(Component Object Model)是目前比较流行的软件开发技术之一,它是基于组件 模型的一种规范。本实验实际演示一个 COM 组件的应用,加深对 COM 组件理论知识的理解。为简单 起见,使用的是进程内 COM 组件,即 COM 的服务器和客户端在同一个进程中。 2 实验要求 本实验设计可以参照本人的论文《基于 COM 组件技术的研究》的内容,也是对本论文的实践检验。 相似之处不在赘述。总体要求是设计一个 COM 组件的服务器和一个客户端。服务器实现两个接口:数 字加法和字符串连接操作。 客户端是基于对话框的 MFC 程序, 有一个友好的界面来测试 COM 组件服务 器的功能。 3 实验平台和工具 Windows 操作系统、VC++6.0。 4 实验步骤 4.1 COM 服务器 为了方便本实验 COM 服务器实现使用的是 ATL(ActiveX Template Library)活动模板库,是一种 微软程序库,也是一套 C++模板库。使用 ATL 能够快速地开发出高效、简洁的代码,同时对 COM 组件 的开发提供最大限度的代码自动生成以及可视化支持。 COM 服务器的对象如下图 Object IUnknown IMath IStr 图 1 COM 服务器对象 具体的步骤如下: 1. 新建一个 ATL 工程 (Project) 。命名为 MyCom(如图 2),并选择 DLL 方式(如图 3)。 2 图 2 新建 ATL 工程 图 3 选择 DLL 说明: Dynamic Link Library (DLL) 表示建立一个 DLL 的组件程序。 Executable (EXE) 表示建立一个 EXE 的组件程序。 Service (EXE) 表示建立一个服务程序,系统启动后就会加载并执行的程序。 Allow merging of proxy/stub code 选择该项表示把"代理/存根"代码合并到组件程序中,否则 需要单独编译,单独注册代理存根程序。 Support MFC 支持 MFC Support MTS 支持事务处理,即是否支持 COM+ 功能。 2. 增加 ATL 对象类: 选择菜单 Insert\New ATL Object\Object 分类\Simple Object 项目 (见图 4) 。 3 图 4 选择建立简单 COM 对象 说明:Object 普通组件。其中可以选择的组件对象类型很多,但本质上,就是让向导帮忙加上一些 默认接口。 3. 增加自定义类 CMath(接口 IMath),见图 5。 图 5 填写类名 4. 填写属性接口,见图 6。 图 6 选择属性 4 5. 添加接口成员函数 图 7 调出增加接口方法的菜单 图 8 增加接口函数 Add 说明: [in]表示参数方向是输入; [out]表示参数方向是输出; [out,retval]表示参数方向是输出,同时可以作为函数运算结果的返回值。 一个函数中,可以有多个[in]、[out],但[retval]只能有一个,并且要和[out]组合后在最后一个位 置。 图 9 接口函数 5 实现代码如下: STDMETHODIMP CMath::Add(long n1, long n2, long * pnVal) { // TODO: Add your implementation code here * pnVal = n1 + n2; return S_OK; } 6. 添加第二个接口 IStr。 完成上述步骤后,打开 IDL 文件(双击 IMath 接口),手工添加代码,其中 UUID 的每个组件,每 个接口都会不同。在下面的代码中加入黑体部分: … //接口的完整描述 [ object, //表示本块描述的是一个接口 uuid(E34275D2-B3CA-4BCA-9AC7-0713ABE2F876), helpstring("IMath Interface"), //说明文字 pointer_default(unique) //定义接口函数中参数所使用指针的默认属性 ] interface IMath : IUnknown //接口 IMath 派生自 IUnknown { //接口函数列表 [helpstring("method Add")] HRESULT Add([in] long n1, [in] long n2, [out,retval] long * pnVal); }; //增加接口代码 [ object, uuid(36A75A3F-94DE-47fe-AF51-0C0C65316A03), // 手工产生的 IID h
剩余10页未读,继续阅读
- 粉丝: 168
- 资源: 3万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助