最近任务需要用arx开发,但版本问题困扰了我很久。在网上找了很多资料,拿出来大家分享。不同版本的AutoCAD的ARX程序不是二进制兼容的,需要使用不同版本的ObjectARX开发包,以及不同版本的编译器。ObjectARX都只能在VisualStudio下编译,其中ARX2006版之前的只能使用C++语言,之后的可以使用C++、VB.net和C#三种语言。
AutoCAD系列软件,在目前市场上的主要版本有R12、R14、2000、2000i、2002、2004、2005、2006和2007。其中2000、2002、2002i、2004、2005、2006、2007的内部版本号分别是R15、R15.0.6、R15.0.7、R16、R16.1,R16.2、R17从内部版本号可以更清楚的知道这些版本之间的关系。CAD和ObjectARX开发包版本及编译器的对应关系基本如下表所示:
CAD版本 ObjectARX版本 VS版本
CAD R12 ARX 1 VC 2
CAD R14 ARX 202 VC 4.2
CAD2000/2002即R15、R15.0.7 ObjectARX 2002 VC 6.0
CAD2004 即R16 ObjectARX 2004 VC 2002(即7.0)
CAD2005 即R16.1 ObjectARX 2005 VC 2003(即7.1)
CAD2006 即R16.2 ObjectARX 2006 VS 2003(即7.1)
CAD2007 即R17 ObjectARX 2007 VS 2005(即8.0)
如果不使用到新特性或已废除的特性,那么同样功能的程序,源代码可以不加修改或少量修改,但必须在不同平台使用不同的开发包重新编译,否则要么无法生成,要么虽然勉强生成但无法载入。当然同一主版本号的CAD,低版本的可以在高版本中载入,如2000的ARX程序可以在2002中载入运行,但稳定性不能完全确保。
另外开发环境的对应也有一些说道。
比较经典的组合:ObjectARX 2002 + AutoCAD 2002 + VC6.0 + Assist 6.0 + VSS 6.0C
目前较稳定的组合:ObjectARX 2004/2005 + AutoCAD 2004/2005 + VC.Net 2002
不兼容的组合(一):ObjectARX 2005 + AutoCAD 2004/2005 + VC.Net 2003,需调用或验证大量VC7.0的库,否则编译不过。解决方案:拷贝VC2002安装目录下/VC7\atlmfc\lib下类似*70*的文件到VC2003下,主要有:mfc70.lib、 mfc70d.lib、mfc70u.lib、mfc70ud.lib mfcs70.lib、mfcs70.pdb mfcs70d.lib、mfcs70d.pdb mfcs70u.lib、mfcs70u.pdb、mfcs70ud.lib、mfcs70ud.pdb
不兼容的组合(二):ObjectARX 2006 + AutoCAD 2006 + VC.Net 2003 + Assist X + VSS 6.0D 同样需要VC7.0的库,简要方法:(1) 复制VC2003的相关库文件如:mfc71.lib、mfcs71.lib并改名为类似*70*的文件如: mfc70.lib、mfcs70.lib;(2) 拷贝VC2002的相关库文件到VC2003的对应安装目录下。:可以解决!采用改名的方法,编译通过,加载时不要用appload(命令行) or "load application"(英文版菜单)
or “加载应用程序”(中文版菜单),而在命令行输入"ARX", 接下来输入“Load”进行arx文件加载(忽略警告),在VC7.1+Autodesk Mechanical Desktop 2006(基于AutoCAD 2006)平台上实验成功,如果避免使用MFC相关功能的话,兼容性应该还是可以的。原文(作者lzljy)见<http://www.objectarx.net/bbs/archiver/?tid-69.html>
使用C#的组合:ObjectARX 2006 + AutoCAD 2006 + V#.Net 2003。.Net ARX编程组合。编译的程序文件名为.dll,在AutoCAD中的加载命令为:NetLoad,但没有?载命令,只有关闭AutoCAD。调用ARX函数时using 相关命名空间,类似VC里include头文件。
最新的组合:ObjectARX 2007 + AutoCAD 2007 + VC.Net 2005 +Visual Assist v10.2.1442.0 + Visual SourceSafe 2005