目前我已经掌握的创建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. struts2的@Result annotation 如何添加params

    参考: http://struts.apache.org/2.0.11/docs/result-annotation.html http://jdkcn.com/entry/add-params-to ...

  2. JAVA使用原始HttpURLConnection发送POST数据

    package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串&q ...

  3. bzoj2241: [SDOI2011]打地鼠

    暴力. O(n^6)暴力卡过,72ms. 莫名其妙做这道题时感觉十分烦躁,难受,只能这样了. O(n^4)的方法是这样差分一下.判断的时候tmp=t[i][j],t[i][j]-=tmp,t[i+r] ...

  4. HDU 1695 (莫比乌斯反演) GCD

    题意: 从区间[1, b]和[1, d]中分别选一个x, y,使得gcd(x, y) = k, 求满足条件的xy的对数(不区分xy的顺序) 分析: 虽然之前写过一个莫比乌斯反演的总结,可遇到这道题还是 ...

  5. Codeforces Round #269 (Div. 2)

    A 题意:给出6根木棍,如果有4根相同,2根不同,则构成“bear”,如果剩余两个相同,则构成“elephant” 用一个数组分别储存各个数字出现的次数,再判断即可 注意hash[i]==5的时候,也 ...

  6. HNOI2004宠物收养所(平衡树)

    treap! var i,n,x,y,ans,a,b,root,tot,ft:longint; l,r,s,v,hr:..] of longint; procedure r_rotate(var x: ...

  7. Asp.Net微信登录-手机网站APP应用

    要求:公众号必须先认证,认证费用¥300/年,比较黑 一.微信登录核心代码 //核心代码,没判断异常 1.登录页面 protected void Page_Load(object sender, Ev ...

  8. 在Windows下编译ffmpeg完全手册

    本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注 ...

  9. 庖丁解牛-----Live555源码彻底解密(RTP解包)

    Live555 客户端解包 以testRTSPClient.cpp为例讲解: Medium<-MediaSource<-FramedSource<-RTPSource<-Mul ...

  10. delphi 编译的时候 把Warning去除的方法

    delphi  编译的时候  把Warning去除的方法 在 添加 {$WARNINGS OFF}