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

萧闫子 发表于 2014-1-8 14:10:26

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

首先你需要确定工程中引用的是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{   
public
void ImportBlock()    {
页: [1]
查看完整版本: [资料] 支持多版本AutoCAD – 使用C#的条件编译