AutoCAD.NET二次开发:创建自定义菜单的两种方法比较
目前我已经掌握的创建CAD菜单方法有两种:
COM方式:
http://www.cnblogs.com/bomb12138/p/3607929.html
CUI方式:
http://www.cnblogs.com/bomb12138/p/3600842.html
从程序复杂度来看,COM方式更简单一些,CUI方式较复杂。
从版本特性来看,COM方式更通用一些,CUI方式仅支持CAD2007+的版本。
从兼容性来看,基本一样;在测试程序中,对于CUI方式,我引用的是CAD2008的类库,而最后生成的程序也可以在CAD2007中正常运行;而对于COM方式,这里要介绍一下CAD提供的COM组件了。CAD的COM组件基本上是每三年一个系列,比如04、05、06提供的是V16系列,07、08、09是V17系列,每个系列中仅注册最高版本的COM组件,比如我电脑上安装离CAD2007和CAD2008,但是仅注册了CAD2008的组件,高版本的COM可以兼容低版本。在我的测试程序中,引用的是AutoCAD 2008 Type Library,起初引用属性中的“复制本地”为False,这个时候生成的DLL拿到了虚拟机中测试,出现了以下情况:
在虚拟机A中,仅安装了AutoCAD 2007,用CAD加载我的DLL,会崩溃,提示找不到程序集。
在虚拟机B中,仅安装了AutoCAD 2009,用CAD加载我的DLL,运行正常。
之后,我把引用属性中的“复制本地“改为了True,把我的DLL和引用到的Autodesk.AutoCAD.Interop.dll一起复制到两个虚拟机中,都可以正常运行。
因此,在编译CAD程序时,如果在创建项目时,引用每个系列中的最低版本类库,则理论上,生成的DLL可以兼容三个版本。
从自动加载实现来看,COM方式配合注册表控制、IExtensionApplication接口实现可以很好地实现菜单的自动加载;而CUI必须用cuiload命令进行加载,所以要实现其自动加载,必须在IExtensionApplication接口中向CAD发送lisp命令来调用cuiload(网上到处都说可以用这种方法实现,但是我不停在尝试,从来未成功,所以不得不怀疑其可行性)。
最终个人认为,还是Com方式较优,虽然这样一来,需要为每个版本的CAD都发布一次程序(因为引用到了COM),但也许我们的程序里还有其他地方会用到COM呢。
而且事实上,我们仅需要一套代码,通过为每个版本的CAD创建一个项目,然后将代码以链接的方式加载到项目中,就可以很方便地发布不同版本的程序集了。如果程序中在些地方不同版本CAD中的写法支持不一样的话,可以用预编译指令进行控制。
以链接方式加载代码的方式如下:
在项目中点鼠标右键,选择“添加现有项”,然后选中要添加的代码文件,点“添加”按钮旁的向下箭头,即可找到“添加为链接”,以这种方式添加的代码文件像桌面快捷方式一样左下角有个箭头。

AutoCAD.NET二次开发:创建自定义菜单的两种方法比较的更多相关文章
- 使用express创建node服务器的两种方法及区别
使用express创建node服务器有两种方法,如下所示: 方法一: var express = require('express'); var app = express(); app.listen ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- Hive开发中使用变量的两种方法
在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...
- 【iOS开发】创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + ( ...
- iOS 中使用 XIB 自定义cell 的两种方法 以及 编译出现常见 的错误 ++++(xcode6.0之后)
一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...
- iOS 中使用 XIB 自定义cell的两种方法以及编译出现常见 的错误 (xcode6.0之后)
一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...
- 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)
对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...
- iOS 创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...
- 微信公众号开发——创建自定义菜单(PHP版)
<?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...
随机推荐
- 转 命令行下玩VC
说明:(1)转载请注明出处:http://www.cnblogs.com/opangle/p/4298155.html (2)以下以VS2013为例,并假设VC安装路径为%VC_INSTALL_PAT ...
- Generic Data Access Layer泛型的数据访问层
http://www.codeproject.com/Articles/630277/Generic-Data-Access-Layer-GDA-Part-I http://www.codeproje ...
- bzoj1064
很巧妙的题 首先有几种情况 1. 有环 2.两点间有多条路径 3.其他 3.显然最简单,最小是3,最大是每个弱联通块中最长链 2.显然,两点间两条路径的差是答案的倍数 1.出现环,那答案一定是其约数, ...
- Java程序员常用工具集
我发现很多人没办法高效地解决问题的关键原因是不熟悉工具,不熟悉工具也还罢了,甚至还不知道怎么去找工具,这个问题就大条了.我想列下我能想到的一个Java程序员会用到的常用工具. 一.编码工具 1.IDE ...
- win7x64下的redis安装与使用
先引用百度百科的一段话吧,具体可以到百科查看吧. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年 ...
- UVA 575 Skew Binary (水)
题意:根据这种进制的算法,例如,给你一个左式,要求推出右式.(其实右式就是一个十进制数,根据这种进位的方法来转成特殊进制的数.) 思路:观察转换特点,有点类似于二进制,但是其在后面还减一了.比如25- ...
- javascript实现map的功能(转载)
/* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, v ...
- hdu 2818 Building Block(加权并查集)2009 Multi-University Training Contest 1
题意: 一共有30000个箱子,刚开始时都是分开放置的.接下来会有两种操作: 1. M x y,表示把x箱子所在的一摞放到y箱子那一摞上. 2. C y,表示询问y下方有多少个箱子. 输入: 首行输入 ...
- 改变DEV控件的字体 z
改变所有的组件字体,使用AppearanceObject.DefaultFont属性:static void Main() { DevExpress.Utils.AppearanceObject ...
- 【Python】python读取文件操作mysql
尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本. Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两 ...