- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
外部.NET程序与AutoCAD交互
外部.NET程序与AutoCAD交互(AutoCAD)开发者一般要么将功能集成到AutoCAD(通过其扩展体系来添加命令、用户界面元素、对象等),要么通过程序来驱动AutoCAD,使通用的任务自动化。这两种方式的界线有时候不是那么明显,我今天要关注的是后者。为了后面的解释方便,我先介绍一下两种应用程序的交互。 一、线程外此种情况下,我们需要在两个独立的可执行程序之间进行通信。就好比如我需要一个.EXE的执行程序来驱动AutoCAD,我们就需要找到某种方式来启动AutoCAD并且与之通信-最典型的就是使用COM技术或更早的DDE技术。这种通信方式,确切地说,是通过进程间通信IPC(Inter-Process Communication)来完成,这种方式在传输大量数据时是非常低效的。这就是早期的ADS和外部VB应用程序运行很慢的原因。二、线程内当程序代码被编译成DLL,不管是VB建立的Activex Dll,ObjectARX模块,还是.NET的程序集,程序与AutoCAD主线程之间的通信都要高效得多-数据结构可以通过指针来传递或直接引用,而不是通过低效的IPC编组来发送数据信息。目前AutoCAD大部分的APIs都是被设计用于线程内的-包括LISP,ObjectARX,和.NET API。因为.NET Remoting的实用性,很多人常希望或期盼着AutoCAD能通过.NET从线程外部驱动,不过.NET的托管API并不是这么设计的-它其实就是对ObjectARX的一个封装,其运行是以通过指针对内部对象的直接访问为基础的,完全不可能超越线程的界线。COM自动化技术的最大特点之一就是它就是被设计成既可以用于线程外(通过外部EXE)也可以用于线程内(通过VBA或通过GetInterfaceObject()来调用VB6的ActiveX DLL)。目前这仍然是从外部可执行程序驱动AutoCAD的最好方式。通常我不建议在进程间传递太多的信息。如果你需要从外部程序驱动AutoCAD,最好只是通过它运行AutoCAD(或是在可能的情况下连接到一个已运行的实例),接下来加载一个线程内的模块,让它在AutoCAD的进程内完成主要的任务。下面的代码就将展示如何用C#来完成这一过程。它会尝试连接到一个已运行的AutoCAD实例(这是随意的-你也可以把代码修改成直接运行一个AutoCAD),如果失败则运行。一旦有了正在运行的对象实例,使之可见且运行一个自定义命令。建议将程序设置成自动加载-要么在AutoCAD启动时加载,要么在命令被触发时加载,然后运行一个模块中定义的命令。你需要添加对“AutoCAD Type Library”的引用,还有导入以下命名空间。using System; using System.Runtime.InteropServices; using Autodesk.AutoCAD.Interop;下面的代码你可以添加到比如某个按钮的Click事件中或其他有效的函数中去。[代码如下]// AutoCAD.Application.17 uses 2007 or 2008, //?? whichever was most recently run // AutoCAD.Application.17.1 uses 2008, specifically const string progID = AutoCAD.Application.17.1; AcadApplication acApp = null; try { acApp = (AcadApplication)Marshal.GetActiveObject(progID); } catch { ?try { Type acType = Type.GetTypeFromProgID(progID); acApp = (AcadApplication)Activator.CreateInstance( acType, ?true ); } ?catch { MessageBox.Show( ?Cannot create object of type \ + progID + \ ); } } if (acApp != null) { ?// By the time this is reached AutoCAD is fully ?// functional and can be interacted with through code acApp.Visible = true; acApp.ActiveDocument.SendCommand(_MYCOMMAND ); }前面讨论了如何通过COM接口从.NET程序运行AutoCAD并执行命令。这样就可
您可能关注的文档
- SYB(第四步)《创办你的企业》(SYB)培训班.ppt
- 第四章(二)城市用地分类与各类用地布局.ppt
- 3PAC 3i介绍.ppt
- 研究生英语写作篇Postgraduate Writing 3 U2 Application Letters.ppt
- 新目标英语七上Starter Unit 2-1.ppt
- PEP 三年级 unit3_look_at_me_letters_and_sound.ppt
- Letters to Juliet 电影介绍.ppt
- 第四节 元素(鲁教版).ppt
- 剑桥少儿英语预备级unit9writeandcolourtheletters.ppt
- 四(六)要素自动气象站原理和维护.ppt
- 2025中国冶金地质总局所属在京单位高校毕业生招聘23人笔试参考题库附带答案详解.doc
- 2025年01月中国人民大学文学院公开招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解.doc
- 2024黑龙江省农业投资集团有限公司权属企业市场化选聘10人笔试参考题库附带答案详解.pdf
- 2025汇明光电秋招提前批开启笔试参考题库附带答案详解.pdf
- 2024中国能建葛洲坝集团审计部公开招聘1人笔试参考题库附带答案详解.pdf
- 2024吉林省水工局集团竞聘上岗7人笔试参考题库附带答案详解.pdf
- 2024首发(河北)物流有限公司公开招聘工作人员笔试参考题库附带答案详解.pdf
- 2023国家电投海南公司所属单位社会招聘笔试参考题库附带答案详解.pdf
- 2024湖南怀化会同县供水有限责任公司招聘9人笔试参考题库附带答案详解.pdf
- 2025上海烟草机械有限责任公司招聘22人笔试参考题库附带答案详解.pdf
文档评论(0)