中间件试验COM_第1页
中间件试验COM_第2页
中间件试验COM_第3页
中间件试验COM_第4页
中间件试验COM_第5页
已阅读5页,还剩15页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中间件技术原理及应用实验 任务书实验内容:co组件对象的设计与应用实验目的:通过对简单COM组件的编写,加深对COM理论知识的理解,为更深层的COM应用实验任应用做准备件化程序设计方法,用V i sual C+编写实现包含I Calculate、IMul2个接口的dll组件,并利用客户端应用程序完成对各接口的充分测试。学生专业:软件工程实习地点:9-2041、实验原理lAddIMulIUnknownCOM对象COM对象12MathICOM组件IUnknown接口成员函数lAddAdd(long n1, long n2, long * pnVal)力卩法运算IMulMul(long n1, lo

2、ng n2, long *pnVal)乘法运算2、实验要求:独立完成COM组件和客户端测试程序的编写。在实验报告中记录相关实现代码,并在实验报告中记录结果。要求客户端调用测试加法运算和乘法运算。3、实验步骤:1. 分析组件结构。2. 编写简单.dll组件。3. 逐步添加接口。4. 编写客户端应用程序进行测试。用regedit命令打开注册表注销操作:RegSvr32 /u c:XXXXX.dll 注册操作:RegSvr32 c:XXXXX.dll在运行客户程序前,必须先注册组件程序5. 写出上机实验报告。4、实验报告格式1. 画出实验所设计的CO组件的结构2. 关键代码(1) 组件部分的关键代码

3、 idl文件内CO对象和接口的关键定义代码 C+文件中成员函数的关键实现代码(2) 客户端测试程序中组件调用部分的关键代码3. 实验结果5、实验步骤提示一) 程建立ATL工IUnknownIMath o- o-接口成员函数IMathAdd(long n1, long n2, long * pnVal)步骤 1 :建立一个工作区(Workspace)。S i mpleCom (如图步骤 2 :在工作区中,新建一个AT L工程(Project)。命名为1),并选择DLL方式图 1新建ATL工程图2选择DLL类型ATL COM AppWizard 步癫 1 共 1 步Set as ANew Clac

4、New ATLNew FoldDocking Hide本向导将创建一个不包含枉何初始COM对製 的ATLX程水向导完成之后,谙使用类视图 里的“新建ATL对製“命令来指定您要添加到工 程的对製的类型.服务器类塑介动态链接库(DLL) (D)可执行文件(EXE) (E)服务(EXE) (S|厂允许合并proxy/stub代码(P)厂支持MFC (M)厂支持mts m下一步|完成取消ATL COM AppWizard将会期建一个新的以下煤榕的工程晋架:COM project SimpleComdspCOM Server name: SimpleCom.dllDLL initialization c

5、ode in SimpleCom.cpp |DL source in SimpleCofn.idlProxyStub makefile in Sim pie Comps.mkrea 录: ESimpleCom确定取常说明:Dynamic Link Library(DLL)表示建立一个D LL的组件程序。Executable(EXE)表示建立一个EXE的组件程序。Service(EXE)表示建立一个服务程序,系统启动后就会加载并执行的程序。Allow merging of proxy/stub code选择该项表示把“代理/存根”代码合并到组件程序中, 否则需要单独编译,单独注册代理存根程序。&

6、#174;Support MFC支持M FCSupport MTS支持事务处理,即是否支持COM+功能。二)、增加 ATL对象类步骤 3 :选择菜单I n sert'New ATL Object'Object 分类Simple Object项目。见图3。ATL Object VizardCategoryObjectsObi&cisContrdsMicelaneousDta AccessActiveX Server ComporwritAddl-in ObjectInternetExplor.MMC SnaplnM5Tiisacti.也 erf >Cancel I图

7、3选择建立简单ATL Object WizoCOM 对象s|fW说明:(1)Category Object普通组件。其中可以选择的组件对象类型很多,本质上就是让 向导帮忙加上一些默认接口。(2) Category Controls ActiveX控件。其中可以选择的A ctiveX类型也 很多。(3)Category Miscellaneou辅助杂类组件。(4)Categroy Data Acces数据库类组件。步骤 4 :增加自定义类C M ath(接口IMath),见图 4。图4输入类中的各项名称步骤5。5 :填写接口属性,见图ATL Object lizard KiiN«n&#

8、171;E Attributes |Thredirtg Model 厂 Single '* Apartment Both 广 £(esInterfaceAg口即 ation 广'* Mo 厂Q咖广 Support ISuportErrcilrio 厂 Support Connection ParttsFree Thfeaded Mrshdler确定駆消图 5接口属性说明:Threadi ng Model选择组件支持的线程模型。In terface接 口基本类型。Dual表示支持双接口; Custom表示自定义借口Aggregation是否允许被别人聚合使用。No表示不

9、聚合。Support ISupportErrorl nfo是否支持丰富信息的错误处理接口。Support Co nn ection Poi nt是否支持连接点接口(事件、回调)。(6) Free Threaded Marshaler)、添加接口成员函数图6调出增加接口方法的菜单S SimpleCom Microsoft Visual C*|(Globals)文件(D «(E)5(V)插入ZT|(Allglol-嗣 SimpleCom classes- : CAddy lAdd CAddO-> lAdd CJ Globals图7增加接口函数说明:Addin表示参数方向是输入;ou

10、t表示参数方向是输出;out,retval表示参数方向是输出,同时可以作为函数运算结果的返回值。一个函数中,可以有多个in、out,但retval只能有一个,并且要和out组合后在最后一个位置。fj囲啓峯 Lookup Wardd mCMhlh甘 ':1.i ni-:iiIn 'X *西! *1鈕求枠强碍血入工程縊谨国口掘肋SiBpleCidv - 创天中丈丫匚+ lath- cppl/ Hth - Epp t EHplnehttiiQiOi £Ndt*h include S,stdafx -h1'ttinctude awSii9pleCon.haHBincl

11、ude "Hath,hr-SlmpleCom classes -"C CMalh-Y IMalh CMalhO-虫 IMalh> Add (long nl. long n2, long * -_J Gl?bal$ Dll Cn On Eo ad Naw(|.Dll GelCla Ob je clfREFCLS II Dll Main(HlN STANCE hlusian DllRegisterServerQ DID Un re gi sterSe irverQO jModuk/ / CHathSTOHETHDDUF CbUth ; : Add(lu nl. luiri

12、Q n2 fi lung * pnyal)"T000: Add your imlenentditiani code here* pn-Ual - nl + nz; return SDK;8接口函数实现代码如下:STDMETHODIMP CMath:Add(long n 1, long n2, long * pnVal) / TODO: Add your impleme ntati on code here* pnVal = nl + n2;return S_OK; _完成上述步骤后,打开添加代码,其中 每个组件,每个接口都会不同。/引入I U nknown 和I DL文件(双击I M

13、ath接口),手U UIDATL已经定义的其它接口描述文件。import "oaidl.idl" import "ocidl.idl"/接口的完整描述object,/表示本块描述的是一个接口uuid(E34275D2-B3CA-4BCA-9AC7-0713ABE2F876),helpstri ng("IMath In terface"), poin ter_default( uniq ue) _in terface IMath : IUnknown/ 说明文字/定义接口函数中参数所使用指针的默认属性/接口叫I M athe派生自IUn

14、known接口函数列表helpstring("method Add") HRESULT Add(in long n1, in long n2, out,retval long* pnVal);/ 类型库的完整描述 uuid(FBF0BE44-9E98-4189-809B-BEC4B67866CC), version(1.0),helpstring("SimpleCom 1.0 Type Library")library SIMPLECOMLib/#import 时候的默认命名空间 importlib("stdole32.tlb");

15、importlib("stdole2.tlb"); uuid(9D4F4C3B-A41F-4A3A-9FF2-F8784DBE2CC5),/组件的helpstring("Math Class")CLSIDcoclass Math/ 接 口列Math提供了 表default interface IMath; /default 表示接口 IIUnknown 接口;四) 、打开头文件(Math.h),手工增加类的派生关系和接口入口表,然后保存。#ifndef _MATH_H_#define _MATH_H_#include "resource.h&q

16、uot;/ main symbols/ CMathclass ATL_NO_VTABLE CMath :public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CMath, &CLSID_Math>,public IMath,/增加一个分隔符逗号public:CMath()DECLARE_REGISTRY_RESOURCEID(IDR_MATH) DECLARE_NOT_AGGREGATABLE(CMath) DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_

17、COM_MAP(CMath)COMN TERFACE_ENTRY(IMath)END_COM_MAP()/ IMathpublic:STDMETHOD(Add)(/*i n*/ Io ng n1, /*i n*/ Io ng n 2, /*out,retval*/ Io ng * pnV al);;#en dif /_MATH_H_五)、编译 DLLDLL了,这样来其它的程按下F 7键,编译器工作片刻后就会在注册表中注册你的新就可以使用它了、亠 SittpleCaM 创天中文VC+ 一 (lat h. cppCMalh苗3"St构件开Hi调试 通進握序远握i至播的玄件歸 £

18、< fiA工程 探谭工貝羽口畫肋Math.亡pFCtrl*FTCai”二阳HHnfnH/niiiHnfuntfHHt申 * * CMalh+ 皿 I Sir+ _| Ghtials!执疔CtrL*?5d(long n1. long n2,long * pnval)Rplfitientdtlon cedehereSTDHETI10DIHP CMath: :Cat (DSTR s1 f BSTR s2p BSTR psUal) / TODD: Add your iRplrnentdtion code her? CCcnCSTR sResult( st );Result.ApppndbSTR(

19、 $2 );*psUJl - Result CoppO :return S_OI;Con figurati on: SimpIeCom - Win32 DebugCompili ng.Mul.cppGen erat ing Code.Skipp in g. (no releva nt cha nges detected)SimpleCom.cppAdd.cppLi nki ng.Creati ng library Debug/SimpleCom.lib and object Debug/SimpleCom.expPerformi ng registratio nSimpleCom.dll -

20、0 error(s), 0 warni ng(s)图 9编译dll六)、在Visual C+中新建工程,编写客户端程序,进行组件测试。步骤 1 :新建工程。选择“ Win32 Console Application,起名为“ TestCom”,在下一个窗口中单击0K按钮接受所有默认值,最后单击Fin ish按钮。步骤 2 :新建文OK接受。在空白文件中添/ 指明工程路径,引用头文件/各G UID 在xxx_i.c文件中/输入输出/字符串类型转换/字符串类型转换件建“ C+ Source File”文件并命名为“ TestCom.cpp”,单击 加一些代码来测试 C OM 服务器。代码如下:#include ".SimpleComSimpleCom.h"#include ".SimpleComSimpleCom_i.c"#include <iostream.h>#include <comutil.h>#include <comdef.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论