EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 768|回复: 0
打印 上一主题 下一主题

[资料] 支持多版本AutoCAD – 使用C#的条件编译

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先你需要确定工程中引用的是acmgd.dll 及acdbmgd.dll的正确版本(你可以通过它们所在的路径来判断他们所对应的AutoCAD版本)。
然后,你需要稍微修改一下你的代码,例如WblockCloneObjects() 的函数定义在2006与2007中是不同的。下面的代码片断告诉你如何使用预处理标识在C#中实现条件编译。你需要在工程设置里把 AC2006 或AC2007设置成 "条件编译符号":
#if AC2006
        mapping = sourceDb.WblockCloneObjects(blockIds,
                                              destDb.BlockTableId,
                                              DuplicateRecordCloning.Replace,
                                              false);
#elif AC2007
        sourceDb.WblockCloneObjects(blockIds,
                                    destDb.BlockTableId,
                                    mapping,

DuplicateRecordCloning.Replace,

false);
#endif
推荐使用#else 而不是#elif ,因为这样可以使你的代码在将来的时候更好维护: 它会自动支持新的版本而不需要特意添加新的代码来进行相关的检查。
另一方面,你实际上可以定义函数只能被编译为一个特定的版本首先,你需要引用System.Diagnostics 命名空间:
using System.Diagnostics;
然后你只需要使用Conditional 属性标识来声明一个只用于其一特定版本AutoCAD的方法:
namespace BlockImport
{

public
class
BlockImportClass
  {
    [Conditional("AC2007"),CommandMethod("IB")]

public
void ImportBlock()
    {

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-28 10:16

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表