目前我已经掌握的创建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二次开发:创建自定义菜单的两种方法比较的更多相关文章

  1. 使用express创建node服务器的两种方法及区别

    使用express创建node服务器有两种方法,如下所示: 方法一: var express = require('express'); var app = express(); app.listen ...

  2. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  3. Hive开发中使用变量的两种方法

    在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...

  4. 【iOS开发】创建单例的两种方法

    创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy   static AccountManager *DefaultManager = nil; + ( ...

  5. iOS 中使用 XIB 自定义cell 的两种方法 以及 编译出现常见 的错误 ++++(xcode6.0之后)

    一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...

  6. iOS 中使用 XIB 自定义cell的两种方法以及编译出现常见 的错误 (xcode6.0之后)

    一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...

  7. 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)

    对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...

  8. iOS 创建单例的两种方法

    创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...

  9. 微信公众号开发——创建自定义菜单(PHP版)

    <?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...

随机推荐

  1. 查看EBS中BI Publisher的版本

    查看EBS中BI Publisher的版本问题,Oracle提供了如下的几种方法: 从BI Publisher产生的报表文件查看 通过系统已打过的补丁(Patch)来决定,通过补丁号和BI Publi ...

  2. Java开发之单例设计模式

    设计模式之单例模式: 一.单例模式实现特点:①单例类在整个应用程序中只能有一个实例(通过私有无参构造器实现):②单例类必须自己创建这个实例并且可供其他对象访问(通过静态公开的访问权限修饰的getIns ...

  3. [Codeforces137C]History(排序,水题)

    题目链接:http://codeforces.com/contest/137/problem/C 题意:给n对数,分别是一个事件的起始和终止时间.问被有几个事件被其他事件包含. 思路:先排序,按照起始 ...

  4. public,protected,friendly,private的访问权限

    请说出作用域public,private,protected,以及不写时的区别 这四个作用域的可见范围如下表所示. 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly. 作用域   ...

  5. iOS开发:插件记录

    进入沙盒的插件 https://github.com/TongeJie/ZLGotoSandboxPlugin 图片提示的插件 https://github.com/ksuther/KSImageNa ...

  6. 转:ASP.NET MVC中Unobtrusive Ajax的妙用

    Unobtrusive Javascript有三层含义:一是在HTML代码中不会随意的插入Javsscript代码,只在标签中加一些额外的属性值,然后被引用的脚本文件识别和处理:二是通过脚本文件所增加 ...

  7. hdu 4635 Strongly connected(强连通)

    考强连通缩点,算模板题吧,比赛的时候又想多了,大概是不自信吧,才开始认真搞图论,把题目想复杂了. 题意就是给你任意图,保证是simple directed graph,问最多加多少条边能使图仍然是si ...

  8. codevs 3290 华容道

    HAHAHA BFS+SPFA. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  9. 强制将IE8设置为IE7兼容模式来解析网页

    强制将IE8设置为IE7兼容模式来解析网页 英文原文:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 文件兼容性用于定义让IE ...

  10. javascript实现map的功能(转载)

    /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, v ...