我用dot net 3.50制作了一个autocad插件,并引用了autocad2012中的acdbmgd.dll、acmgd.dll我能做些什么使它同时在autocad2010和autocad2011上运行如果我应该引用autocad2010中的acdbmgd.dll、acmgd.dll,当我只有autocad2012
我在AutoCAD 2010中使用2008库取得了一些成功,因此使用AutoCAD 2010中的库可能是您的最佳选择,尽管不能保证有效。这将取决于你到底在做什么。
可以从Autodesk Developer Center(位于页面底部)下载这些库作为ObjectARX 2010软件包的一部分。如果需要,您也可以从那里获得ObjectARX 2011。
我最幸运的是使用了AutoLISP。我在1995年写的工具现在仍然很结实,没有任何修改。
.Net API比ActiveX更兼容,但仍有一些差异。
您总是可以使用Reflection来调用函数(按名称调用它们),但需要进行一系列检查,并且拥有您的应用程序将需要做大量工作。对所有版本的反应都是一样的。
你最好的选择(至少我会这么做)是为你想要的每个函数性创建一个包装类。例如,我会创建一个"MyCircle"类来处理圆,然后在这个类中创建一个通用函数(例如:"ChangeThickness(int newThickness)"),并在其中执行反射代码,这样您就可以根据安装的AutoCAD版本来控制调用的方式(例如,在某个版本的AutoCAD中不调用特定函数,因为它包含错误)。这将创建一个可扩展的图层,您将能够在所有版本的AutoCAD中重复使用,并且您将能够支持API中的任何更改。
我这样做是为了2012年和2013年。他们之间有些不同。
我通常会启动两个项目,一个是2012年的Acad.NET向导,另一个是2013年的Acad.NET向导
同时更新两者
大多数情况下,它只是复制粘贴,有些情况下会有所不同,2013年API已经发展,例如在Civil3d 2012中,没有任何Co-Go点API,因为在2013年,他们已经添加了它,所以在这种情况下,我需要稍微更改代码,以便在2013年工作。