[翻译]Kean' Blog 在一个.NET应用程序中调用AutoCAD
程序员通常要么整合功能到AutoCAD(利用其Plug-in结构,以增加命令,用户界面,对象等),或者调用它自动完成任务。显然,这两者之间的界限已经比较模糊,但是今天我们重点介绍第二类。
用于帮助理解后面的说明,我想介绍两种类型的应用程序交互。
Out-of-process
在这种情况下,我们有两个独立的程序试图交互。试想你有一个EXE和你想调用的AutoCAD。你需要某种方式来启动它,并却与它通讯,
通常可是使用COM,之前是DDE。通讯按照定义来说是由跨进程间通信( Inter-Process Communication (IPC)),IPC对于发送大量数据显得效率十分低下。这时就为什么原来的ADS和外部VB程序运行十分缓慢的原因。
In-process
当你的代码打包为DLL(无论是VB6的ActiveX DLL还是ObjectARX模块,或者.NET封装的DLL),他和主进程(AutoCAD)的通讯与IPC相比就要快捷的多,数据可以通过指针和引用进行传递。
目前大部分AutoCAD的API都是为in-process设计的。包括LISP,ObjectARX和AutoCAD的.NET API。许多人希望AutoCAD可以通过.NET Remoting在out-of-pocess模式下被调用,但这并不是托管API的初衷:它实际上被封装在使用指针调用和存取Objects的ObjectARX之上,而且它并不是跨越进程界限的处理工作。COM的一个很好的特点是,它既可以工作于out-of-process模式(外部EXE),也可以在in-process(VBA,或者通过调用GetInterfaceObject()来装载一个VB6 ActiveX DLL)。这是一个从外部应用程序调用AutoCAD的最好的办法。
我通常不推荐越过进程边界传递太多的信息。如果你需要从一个外部应用程序中调用AutoCAD,启动它(或者连接到它的一个正在运行的实例),然后在AutoCAD进程内部加载一个in-process模块处理大量的信息。
下面的代码说明了怎么做到上面的方法。它连接到一个正在运行的AutoCAD实例(可选,你可以调整代码直接启动AutoCAD),如果失败,再启动AutoCAD。一旦有一个正在运行的实例,我们使之可见,并且运行一个自定义的命令。
你需要在你的应用程序中添加"AutoCAD Type Library"引用
This C# code can be added to an “on-click” event handler for a button (for example) or another function that makes sense in the context of your application.
using System;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;
// "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 ");
}
[翻译]Kean' Blog 在一个.NET应用程序中调用AutoCAD相关推荐
- [翻译]Kean' Blog 在一个.NET应用程序中调用AutoCAD(续)
这篇文章应该算是上篇文章的续,跟上个一样,不过是利用System.Diagnostics命名空间的类,实现启动CAD时候+上参数. 直接贴代码了,,呵呵~ using System; using Sy ...
- SQL Server 2005 - 如何在预存程序中调用另外一个预存程序
要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用: <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...
- 本地方法(JNI)——从java 程序中调用C函数
[0]README 1) 本文部分文字描述 转自 core java volume 2 , 旨在理解 本地方法--从java 程序中调用C函数 的基础知识 : 2) for source code, ...
- 苹果系统手机调用java线程出错_在多线程Java应用程序中调用已编译的m-file(.jar)时出错...
我有一个简单的M文件 function [fRate,Height,Width] = media(filename) obj = mmreader(filename); fRate = obj.Fra ...
- 在C# winform程序中调用WPF写的数学公式编辑器
由于工作原因,需要在程序中加入数学公式编辑功能,因此在网上找了不少开源数学公式程序.经过比较,最终选择了Math-Editor-master程序(可以在github上搜索此名称). 我的程序(简称主程 ...
- 在VB应用程序中调用Excel2000
Visual Basic简称(VB)是设计Windows应用程序强有力的开发工具,"全球绝大多数Windows应用程序都是用VB开发的": Excel是目前使用最广泛的办公应用软件 ...
- Linux jsp php集成环境,ImageMagick在程序中调用(linux环境,jsp,php)
最近发现图片格式为cmyk时,图片上传浏览器不能正常显示,图片缩放会变成黑屏, 后来通过google发现imagemagick的功能很强大,安装可以采用两种方法,1)直接与php编译安装,在程序中调用 ...
- 在Delphi程序中调用控制面板设置功能
====================================================== 注:本文源代码点此下载 ================================= ...
- 安卓程序中调用 linux 命令
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 在研究串口 jni 开发的时候,遇到了这样一段代码: Process su;su = Runtime.getRuntim ...
最新文章
- 马斯克入选美国工程院院士,张宏江博士入选外籍院士
- IPv6扩展头部 (四) 分片头部 Fragment Header for IPv6
- python js 效率_巧用 db.system.js 提升20% 开发效率
- 1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码
- There is no tracking information for the current branch
- Apache启动错误:could not bind to address[::]:443
- apache 配置php 版本错误u,PHP+Apache+MySQL 在配置环境时遇到的问题
- JSP HTTP 状态码
- 卸载linux订阅包
- 苏联W ndows视频,俄罗斯大神win10精简版32位
- 如何使用迭代器Iterator与增强for循环遍历Map集合?
- 网易云视频直播推流集成大致过程
- 中国(广西)壮语春节联欢晚会将举办
- 显示杂谈(1)-Gamma到底是个什么鬼
- 软件测试“摆烂”已经成为常态化,我们应该怎样冲出重围?
- 计算机网络组成复习笔记
- 基于Xilinx LUT6设计高效紧凑的2:1 Bus Mux
- Android Studio 开发(二)问题
- 什么是 jQuery ?
- 没别的,就聊聊数据通信网络
热门文章
- iview/view UI 表格+表单提交必填验证简单方案
- 采访赵然:天天动听的精益之路
- 作为一名测试工程师,你真的知道“微信红包”怎么测试吗?
- 在信号传输当中,载波和调制波的关系
- fluent旋转机械滑移网格法设置
- 人工智能 漆桂林_东南大学计算机科学与工程学院硕导介绍:漆桂林
- google dns 怎么用 ,google dns 的ip 设置 方法介绍
- 非同质化通证在商业模式中如何应用
- 12000字解读瑞幸咖啡:“异军突起”与“绝处逢生”的奥秘
- Tomcat出现validateJarFile-jar not loaded问题