ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:1MB ,
资源ID:3066600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3066600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(COM试验VC版文档格式.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

COM试验VC版文档格式.docx

1、注销操作:RegSvr32 /u c:XXXXX.dll注册操作:RegSvr32 c:在运行客户程序前,必须先注册组件程序。5.写出上机实验报告。实验报告格式1.画出实验所设计的COM组件的结构2.关键代码(1)组件部分的关键代码idl文件内COM对象和接口的关键定义代码C+文件中成员函数的关键实现代码(2)客户端测试程序中组件调用部分的关键代码3.实验结果COM试验参考一、建立ATL工程( 注意:和试验任务书要求的组件结构不同)IMathAdd(long n1, long n2, long * pnVal)Cat(BSTR s1, BSTR s2, BSTR *psVal)步骤1:建立一个

2、工作区(WorkSpace)。步骤2:在工作区中,新建一个ATL工程(Project)。命名为SimpleCom(如图1),并选择DLL方式(如图2)。图1 新建ATL工程图2 选择DLL类型说明:Dynamic Link Library(DLL) 表示建立一个 DLL 的组件程序。Executable(EXE) 表示建立一个 EXE 的组件程序。Service(EXE) 表示建立一个服务程序,系统启动后就会加载并执行的程序。Allow merging of proxy/stub code 选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。Support

3、 MFC 支持MFCSupport MTS 支持事务处理,即是否支持 COM+ 功能。二、增加ATL对象类步骤3:选择菜单 InsertNew ATL ObjectObject 分类Simple Object 项目。见图3。图3 选择建立简单COM对象Category Object 普通组件。其中可以选择的组件对象类型很多,但本质上,就是让向导帮忙加上一些默认接口。Category Controls ActiveX 控件。其中可以选择的 ActiveX 类型也很多。Category Miscellaneous 辅助杂类组件。Categroy Data Access 数据库类组件。步骤4:增加自

4、定义类 CMath(接口IMath),见图4。图4 输入类中的各项名称步骤5:填写接口属性,见图5。图5 接口属性Threading Model 选择组件支持的线程模型。Interface 接口基本类型。Dual 表示支持双接口;Custom 表示自定义借口。Aggregation是否允许被别人聚合使用。No表示不聚合。Support ISupportErrorInfo 是否支持丰富信息的错误处理接口。Support Connection Points 是否支持连接点接口(事件、回调)。Free Threaded Marshaler三、添加接口成员函数图6 调出增加接口方法的菜单图7 增加接口

5、函数 Addin表示参数方向是输入;out表示参数方向是输出;out,retval表示参数方向是输出,同时可以作为函数运算结果的返回值。一个函数中,可以有多个in、out,但retval只能有一个,并且要和out组合后在最后一个位置。图8 接口函数实现代码如下:STDMETHODIMP CMath: / TODO: Add your implementation code here* pnVal = n1 + n2; return S_OK;四、添加第二个接口IStr。完成上述步骤后,打开IDL文件(双击IMath接口),手工添加代码,其中UUID每个组件,每个接口都会不同。/引入IUnkno

6、wn和ATL已经定义的其它接口描述文件。import oaidl.idl;ocidl.idl/接口的完整描述 object, /表示本块描述的是一个接口 uuid(E34275D2-B3CA-4BCA-9AC7-0713ABE2F876), helpstring(IMath Interface), /说明文字 pointer_default(unique) /定义接口函数中参数所使用指针的默认属性 interface IMath : IUnknown /接口叫 IMathe 派生自 IUnknown /接口函数列表 helpstring(method Add) HRESULT Add(in l

7、ong n1, in long n2, out,retval long * pnVal); ;/增加接口代码 object, uuid(36A75A3F-94DE-47fe-AF51-0C0C65316A03), / 手工产生的 IID IStr Interface), pointer_default(unique) interface IStr : IUnknown /新建接口 / 目前还没有任何接口函数/增加接口代码结束/类型库的完整描述 uuid(FBF0BE44-9E98-4189-809B-BEC4B67866CC), version(1.0), helpstring(SimpleC

8、om 1.0 Type Library)library SIMPLECOMLib /#import 时候的默认命名空间 importlib(stdole32.tlb);stdole2.tlb uuid(9D4F4C3B-A41F-4A3A-9FF2-F8784DBE2CC5), /组件的 CLSIDMath Class coclass Math/接口列表 default interface IMath; /default表示接口IMath提供了IUnknown接口 interface IStr; /在接口列表中添加新接口;其中手工产生GUID可借助于vc目录CommonToolsGuidGen

9、.exe程序。五、打开头文件(Math.h),手工增加类的派生关系和接口入口表 ,然后保存。#ifndef _MATH_H_#define _MATH_H_#include resource.h / main symbols/ CMathclass ATL_NO_VTABLE CMath : public CComObjectRootEx, public CComCoClass public IMath, /增加一个分隔符逗号 public IStr /增加一个基类public: CMath() DECLARE_REGISTRY_RESOURCEID(IDR_MATH)DECLARE_NOT_

10、AGGREGATABLE(CMath)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CMath) COM_INTERFACE_ENTRY(IMath) COM_INTERFACE_ENTRY(IStr) /增加新接口到接口入口表END_COM_MAP()/ IMath STDMETHOD(Add)(/*in*/ long n1, /*in*/ long n2, /*out,retval*/ long * pnVal);#endif /_MATH_H_六、为IStr接口增加一个字符串连接功能的函数。图9 添加接口函数CatCComBSTR sRes

11、ult( s1 ); sResult.AppendBSTR( s2 ); *psVal = sResult.Copy();七、编译DLL按下F7键,编译器工作片刻后就会在注册表中注册你的新DLL了,这样一来其它的程序就可以使用它了。图9 编译dll八、在Visual C+中新建工程,编写客户端程序,进行组件测试。新建工程。选择“Win32 Console Application”,起名为“TestCom”,在下一个窗口中单击OK按钮接受所有默认值,最后单击Finish按钮。新建文件新建“C+ Source File”文件并命名为“TestCom.cpp”,单击OK接受。在空白文件中添加一些代码

12、来测试COM服务器。代码如下:.SimpleComSimpleCom.h /指明工程路径,引用头文件.SimpleComSimpleCom_i.c /各GUID在xxx_i.c文件中#include /输入输出comutil.h /字符串类型转换comdef.hvoid main(void)HRESULT hr;IUnknown *pUnknown;IMath *IMathAdd = NULL;IStr *IStrCat = NULL;GUID MathCLSID;hr = CoInitialize(0); /COM库初始化if(hr=S_OK) hr=:CLSIDFromProgID(LSi

13、mpleCom.Math.1,&MathCLSID); hr = CoCreateInstance( MathCLSID, NULL, CLSCTX_INPROC_SERVER,IID_IUnknown, (void*) &pUnknown); if(hr=S_OK) hr=pUnknown-QueryInterface(IID_IMath,(void *)&IMathAdd); if(hr=S_OK) long ReturnValue; IMathAdd-Add(5, 7, &ReturnValue); cout The answer for 5 + 7 is: ReturnValue Cat(SysAllocString (LMiddleWare),SysAllocString(LTechnology), &CatString);MiddleWare+Technology: _bstr_t(CatString) SysFreeString(CatString);else cout CoCreateInstance Failed. CoUninitialize();第3步:编译并运行程序按下F5键来编译程序,然后按下Ctrl+F5运行。图13 运行结果

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2