SolidWorks二次开发COM基础知识

上传人:s9****2 文档编号:476879622 上传时间:2023-02-10 格式:DOCX 页数:3 大小:12.10KB
返回 下载 相关 举报
SolidWorks二次开发COM基础知识_第1页
第1页 / 共3页
SolidWorks二次开发COM基础知识_第2页
第2页 / 共3页
SolidWorks二次开发COM基础知识_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《SolidWorks二次开发COM基础知识》由会员分享,可在线阅读,更多相关《SolidWorks二次开发COM基础知识(3页珍藏版)》请在金锄头文库上搜索。

1、COM对象以对象形式封装了接口属性事件,以CLSID作为唯一标识,注册后会CLSID会被写入 注册表, 之后为文件路径COM 接口COM对象以接口的方式提供服务,接口是唯一通道COM 对象有三个基本的接口类,IUnknown,IClassFac tory,IDispa tch.任 何 借 口 都 必 须 从 IUnknown 继 承 ,IUnknown 包 含 了 三 个 函 数,QueryIn terface,AddRef,Release,三个函数很重要且排列顺序不能变Queryin terface查询组件实现的其他接口,即查看组件的父类有哪些接口 AddRef 增加引用数Release 减

2、少引用数这两者比较容易出错,不过大部分C+类库已经将AddRe f隐含了,只需要在适当的时 候调用Release即可,两种情况:调用了 Queryin terface之后,创建组件的任务交给了一个单独的对象-类厂-每个对象都有一个与之相关的类厂 或者调用了任何得到一个接口的指针函数之后客户仅仅知道代表组件的128 位的字符串 当用户请求创建组件对象实例时,类厂创建后将指针交给客户-这对于远程以及进 程间的调用特别有用-复杂的调度过程都由类厂做了iClassFactory 最重要的函数-Createinstance-创建组件实例-一般不会直接调 用它-API帮我们封装好了,只有特殊情况下才由我们

3、直接调用-C+编写COM组件的优势一 更多的控制机会iDispatch 调度接口用于其他语言,尤其是不支持指针等功能的脚本语言,比如JavaScrip,用于分布式应 用调度接口将每一个函数和属性编上号,客户调用这些函数属性时只需将这些编号传给 IDispatch即可,然后IDispatch再根据编号调用函数,主要函数为Invoke,客户都调用它IDL(Interface Define Language)接口定义语言与硬件平台无关的语言,不同的编译平台 通过IDL工具生成相应语言的接口如VC的MIDL就把IDL的描述生成C+接口该接口中有 3 个方法:interface IMyAddinObj:

4、IDispatchid(1),helpstring(Start Notepad)HRESULT StartNotepad;id(2),helpstring(Toolbar Update)HRESULT ToolbarUpdate(out,retvallong *status);id(3),helpstring(Display PropertyManagerPage)HRESULT DisplayPMP(); ;COM接口是组件间通信的基础,是软件组合的关键在SolidWorks二次开发中也是先获得SolidWorks API对象的接口,然后再使用接口提供的 方法,一个COM对象可以有一个或多个

5、COM接口方法:接口中提供的供COM客户使用的函数 事件:通过消息响应机制获取处理事件 组件模块:组件模块为组建提供活动空间并完成组建对象的注册,通常以dll形式表现,COM 对象封装在其中,一个模块可以有多个组件引用计数:该参数为 0 时,释放组件OLE Object Linking and Embedding-对象链接与嵌入OLE自动化是SolidWorks API的基础客户一服务器ATL ActiveX Template Library 一套C+模板库,似于MFC,使用它可以快速高效的开发出高效简洁的代码,同时对COM 组件的开发提供最大限度地代码自动生成以及可视化支持ATL 优点: 为

6、维护代价较高的数据类型(如接口指针,VARIANT,BETR, HWND)提供包装类 提供了一些类,它们实现了诸如 IUnkown IClassFactory IDispatch IPersistXxx,IConnectionPointContainer 和 IEnumXxx 这些基本的 COM 接口 管理COM服务器的类,用于暴露类对象,自注册,服务器生命周期管理 节省手工录入的向导(Wizard)C+好处多多每种类型的COM对象对应SolidWorks工作平台的某个元素如PartDoc对应SolidWorks的零件文件,对零件的所有操作大部分都能在这一 COM对象中找 到对应的方法使用So

7、lidWorks的COM对象时的一般步骤1声明一个COM组件,如 LPMODELDOC2 pDoc2=NULL;2 获得改 COM 组件对象的指针,如hres=TheApplication-GetSWApp()-IOpenDoc5(fileName,swDocASSEMBLY,swOpenDocOptio ns_Slient,JHDOName,&fileError,&pDoc2);3使用该COM组件对象提供的服务进行操作如 hres=pDoc2-GetTitle(&title);4 释放该 COM 组件对象指针如 pDoc2-Release();C+ COM 实现:LPMODELDOC m_M

8、odelDoc = NULL;HRESULT res = UserApp()-getSWApp()-get_IActiveDoc( &m_ModelDoc);/ 获得IModelDoc 指针if( m_ModelDoc = NULL)res=m_ModelDoc-QueryInterface(IID_IPartDoc,(LPVOID *) &m_PartDoc);/ 获 得 IPartDoc 指针ASSERT(res=S_OK);./在代码中使用接口m_ModelDoc-Release();/释放 IModelDoc 指针m_PartDoc-Release();/释放 IPartDoc 指针C

9、+ 调用实现LPDISPATCH modDisp;modDisp二UserApp-ge tSWApp()-Ge tAct iveDoc();/获得家伙文件接口的指针/modDisp的参考数自动增加一if(modDisp=NULL)return;IModelDoc m_ModelDoc( modDisp ); /连接到 IModelDoc 对象IPartDoc m_PartDoc(modDisp);/连接到 IPartDocmodDisp-AddRef();/手动增加modDisp的参考数,因为这是第二次使用modDisp./在代码中适用对象/变量超出范围 调用IModelDoc和IPartDo

10、c销毁,这将减少modDisp的参考数为2COM格式uuid(35BlE598T687-41E0-AE5D-BE011673B6D7), /类的 CLSID 它是 Globally Unique Identifier 的简称,中文翻译为“全球唯一标示符”, 在 Windows 系统中也称之为 ClassID, 缩写为CLSID。对于不同的应用程序,文件类型,OLE对象,特殊文件夹以及各种系统组件, Windows都会分配一个唯一表示它的ID代码version(1.0)/版本?coclass CollarOneSnipeB4Def /类名default interface _CollarOneSnipeB4Def; /类的默认接口interface IJDUserSymbolServices; /类中的另一个接口;返回值如果使用C+ COM SolidWorks API函数总是返回一个HRESULT.任何额外的返回值通过参考 作为变量传递HRESULT 仅表示代码被成功调用了, 不代表达到目的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号