原文连接:ARX项目模板一键创建多版本项目
我记得这个公众号的第一篇文章就是《平台搭建二次开发平台搭建(VS2012&CAD2016)》,现在看来后边的步骤是完全没必要的,项目创建之后,项目中的属性管理文件 *.props 就已经把需要的引用设定好了,我把后半部分删除重新发布一下水一篇,嘻嘻。
首先CAD ARX C++ 二次开发需要针对 AutoCAD 多个版本进行适配,核心原因在于 AutoCAD 版本迭代带来的底层架构、API 接口及运行环境的变化,而 ARX 作为直接与 AutoCAD 内核交互的开发方式,对这些变化高度敏感。具体原因如下:
- AutoCAD 内核与 API 的版本依赖性
ARX 开发本质是通过调用 AutoCAD 提供的底层 API(基于 ObjectARX 框架)与 AutoCAD 内核(如图形数据库、几何引擎、命令系统等)交互。而 Autodesk 在每个 AutoCAD 新版本(如 2018、2022、2024 等)中,可能会:
- 修改或移除旧 API:为了优化性能、修复漏洞或重构架构,部分旧版本的函数、类或数据结构可能被弃用(如
AcDbEntity的某些方法),甚至直接移除。 - 新增或调整接口:引入新功能(如三维建模增强、云协作支持)时,会新增 API 或调整现有接口的参数/返回值(如
AcGePoint3d相关几何计算接口的扩展)。 - 变更底层数据结构:AutoCAD 的图形数据库(
AcDbDatabase)、实体存储格式等可能随版本优化,导致基于旧结构的 ARX 代码无法正确读写数据。
因此,针对某个 AutoCAD 版本开发的 ARX 插件,直接放到另一个版本中可能因 “接口不匹配” 导致编译失败(如找不到函数)或运行崩溃(如访问已变更的内存结构)。
- ARX SDK 与编译器的强绑定
ARX 开发依赖 Autodesk 官方提供的 ObjectARX SDK,而每个 AutoCAD 版本对应唯一的 SDK 版本(如 AutoCAD 2023 对应 ObjectARX 2023 SDK)。同时,SDK 对编译器版本有严格要求:
- 不同 SDK 可能仅支持特定版本的 Visual Studio(如 AutoCAD 2020 需 VS2017,2024 需 VS2022),因为编译工具链(如 C++ 标准库、链接器)的差异会导致二进制兼容性问题。
- 若用旧 SDK 编译的插件在高版本 AutoCAD 中运行,可能因 “链接库版本不匹配” 导致加载失败(如
acdb19.dll与acdb24.dll不兼容)。
这意味着,即使代码逻辑不变,针对不同 AutoCAD 版本的插件也必须用对应版本的 SDK 和编译器重新编译。
- 运行时环境的差异
AutoCAD 不同版本的运行时环境(如依赖的系统库、注册表配置、安全机制)可能不同:
- 系统库依赖:新版本可能依赖更高版本的 Windows 系统库(如 .NET Framework、MSVC 运行时),旧版本插件可能因缺失依赖而无法启动。
- 安全机制升级:高版本 AutoCAD 可能加强了插件加载验证(如数字签名要求、沙箱机制),未适配的旧插件可能被拦截。
- 功能兼容性:某些 AutoCAD 功能(如动态块、参数化设计)在版本间有行为差异,ARX 插件若依赖这些功能的具体实现,需针对版本调整逻辑。
- 用户需求的多样性
不同行业或用户可能因成本、习惯、协同需求等原因,长期使用特定版本的 AutoCAD(如设计院可能停留在 AutoCAD 2018,而新企业可能使用 2024)。若 ARX 插件仅支持单一版本,会大幅限制适用范围。因此,开发者需通过多版本适配覆盖更广泛的用户群体。
总结下来其实就是一句话:客户需要,不改就白干,不改没钱啊。
既然需要多版本,那么目前CAD ARX 都有哪些版本呢,下边的表格做了详细的统计(CAD 2008-2026):
| 序号 | CAD版本 | CAD版本号 | 二进制兼容 | .Net Framework | VS版本 | VS平台集 | _MSC_VER |
|---|---|---|---|---|---|---|---|
| 1 | AutoCAD 2008 | R17.0 | AutoCAD 2008 | VS2005 | V80 | 1400 | |
| 2 | AutoCAD 2010 | R18.0 | AutoCAD 2010 | 3.5.1 | VS2008(SP1) | V90 | 1500 |
| 3 | AutoCAD 2011 | R18.1 | AutoCAD 2011 | 3.5.1 | VS2008(SP1) | V90 | 1500 |
| 4 | AutoCAD 2012 | R18.2 | AutoCAD 2012 | 4.0 | VS2008(SP1) | V90 | 1500 |
| 5 | AutoCAD 2013 | R19.0 | AutoCAD 2013 | 4.0 | VS2010(SP1) | V100 | 1600 |
| 6 | AutoCAD 2014 | R19.1 | AutoCAD 2014 | 4.0 | VS2010(SP1) | V100 | 1600 |
| 7 | AutoCAD 2015 | R20.0 | AutoCAD 2015 | 4.5 | VS2012(SP4) | V110 | 1700 |
| 8 | AutoCAD 2016 | R20.1 | AutoCAD 2016 | 4.5 | VS2012(SP4) | V110 | 1700 |
| 9 | AutoCAD 2017 | R21.0 | AutoCAD 2017 | 4.6 | VS2015(SP1) | V140 | 1900 |
| 10 | AutoCAD 2018 | R22.0 | AutoCAD 2018 | 4.6.2 | VS2015(SP3) | V140 | 1900 |
| 11 | AutoCAD 2019 | R23.0 | AutoCAD 2019 | 4.7.2 | VS2017(SP2) | V141 | 1910 |
| 12 | AutoCAD 2020 | R23.1 | AutoCAD 2020 | 4.7.2 | VS2017(SP2) | V141 | 1910 |
| 13 | AutoCAD 2021 | R24.0 | AutoCAD 2021 | 4.8 | VS2019(16.0) | V142 | 1920 |
| 14 | AutoCAD 2022 | R24.1 | AutoCAD 2022 | 4.8 | VS2019(16.7) | V142 | 1927 |
| 15 | AutoCAD 2023 | R24.2 | AutoCAD 2023 | 4.8 | VS2019(16.11) | V142 | 1929 |
| 16 | AutoCAD 2024 | R24.3 | AutoCAD 2024 | 4.8 | VS2022(17.2) | V143 | 1932 |
| 17 | AutoCAD 2025 | R25.0 | AutoCAD2025 | net 8.0 | VS2022(17.3) | V143 | 1935 |
| 18 | AutoCAD 2026 | R25.1 | AutoCAD2026 | net 8.0 | VS2022(17.3) | V143 | 1935 |
如上表相同颜色版本插件是可以共用的,如 CAD 2024 编译的插件是可以在 CAD 2021-2024 四个版本上使用的(前提是没有使用新的接口)。
因此一般来说以上 CAD 2008-2026 这 18 个版本我们需要配置 2012、2014、2016、2017、2018、2020、2024 和 2026 这 8 个版本即可。
那么接下来就是如何实现多版本配置呢,这两篇文章
《也谈ObjectARX多版本批量编译》
《VS2022 编译 ARX2002~ARX2025》
详细介绍了这个过程,内容很详细,但是好复杂呀,看下来我只有一个念头:幸福三重奏陈建斌求放过soogifsoogif出品gif动图_动态图_表情包下载
但是摸摸自己的口袋还是乖乖的研究了起来,但是试了两次还是放弃了,那么有没有简单的不用动脑子的方法?
有,当然有!!!其实就是利用 VS 创建一个模板,之后我们创建项目的时候 VS 直接自动套模板就行了。
-
按照《二次开发平台搭建(VS2012&CAD2016)》采用向导安装一个 ARX 编译环境(推荐高版本),主要是为了在开发过程中使用 ARX MFC、反应器及 JIG 等模板
![图片] -
下载需要的 CAD 对应的 SDK,解压之后放到规划好的目录下(我选择了 CAD 默认安装目录
C:\Program Files\Autodesk,Props 文件夹下是各版本的属性配置文件,这个自行按照向导生成的文件修改调整吧)
![图片]
![图片] -
将模板项目
ArxTemplate.zip(这是个文件夹不是 zip 压缩包)放置到 VS 的模板文件夹下即可
![图片] -
VS 创建项目
![图片]
①. 直接 1 搜索 ARX , 2 创建新项目;
②. 如果侧边有 3 直接点击创建即可;
![图片]
如图,创建之后即可得到 2016-2026 多个版本,并可以一键编译成功。
-
视频演示
-
配置修改
![图片]
可以在模板文件此处修改为自己 ARX *.porps 属性文件位置。
- 资源分享
公众号后台回复【ARX 项目模板】获取模板项目文件。

796

被折叠的 条评论
为什么被折叠?



