您的位置:首页 > 编程语言 > C#

支持多个版本的AutoCAD——C#中的条件编译——Through the Interface

2013-10-30 21:40 471 查看
原文:Supporting multiple AutoCAD versions - conditional compilation in C#

有人问通过电子邮件如何获取上周发布的导入块的代码,然后在昨天的博文中讨论了如何在AutoCAD
2006中工作。我一直在使用AutoCAD 2007本,但为使它能在2007上工作只需要做很少的改动。

有人问通过电子邮件如何获取上周发布的导入块的代码,然后在昨天的博文中讨论了如何在AutoCAD 2006中工作。我一直在使用AutoCAD 2007本,但为使它能在2007上工作只需要做很少的改动。

首先,你需要确保你引用到项目中的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命名空间。

然后你可以使用条件属性来声明一个特定的方法(在这里是一个命令)为一个特定版本的AutoCAD(如果你愿意,你也可以通过条件预处理器的DEBUG符号指定一个Debug-only命令):

namespace BlockImport
{
public class BlockImportClass
{
[Conditional("AC2007"),CommandMethod("IB")]
public void ImportBlock()
{
...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: