当前位置: 首页 > news >正文

AutoCAD 2024 + Visual Studio 2022 ARX 二次开发从零到 Hello World 保姆级教程——001环境搭建

目录

  1. 前置概念

  2. 软件版本对应关系

  3. 下载所需文件

  4. 安装 ObjectARX SDK

  5. 安装 ObjectARX Wizards

  6. 配置 Visual Studio 2022 必要组件

  7. 创建第一个 ARX 项目

  8. 项目属性检查与修改

  9. 编写 Hello World 代码

  10. 编译生成 .arx 文件

  11. 设置 AutoCAD 信任路径

  12. 加载并运行命令

  13. 常见错误大全

  14. 完整代码清单

  15. 进阶提示


1. 前置概念

  • ARX:AutoCAD Runtime eXtension,编译后为 .arx 文件(本质是 DLL),可被 AutoCAD 加载,实现自定义命令。

  • ObjectARX SDK:Autodesk 提供的开发包,包含头文件、库文件、示例和文档。

  • ObjectARX Wizards:Visual Studio 的项目模板安装程序。

  • acrxEntryPoint:ARX 的入口函数,必须被导出。

  • acrxGetApiVersion:另一个必须导出的函数,用于版本校验。

核心记忆:ARX = 特殊 DLL + 两个必须导出的函数 + 一个命令注册。


2. 软件版本对应关系

AutoCAD 版本ObjectARX SDK 版本官方推荐 Visual Studio
AutoCAD 2024ObjectARX 2024Visual Studio 2022 (v143 工具集)

⚠️ 警告:

  • 不要用 VS 2026 或更高版本编译 AutoCAD 2024 的 ARX。

  • 不要用 Debug 配置 + 动态 MFC 分发。

  • 不要混用 32 位与 64 位(AutoCAD 2024 是 64 位)。


3. 下载所需文件

  • ObjectARX SDK 2024:
    官方下载:https://aps.autodesk.com/developer/overview/autocad-objectarx-sdk-downloads
    直接 exe 链接:https://damassets.autodesk.net/content/dam/autodesk/files/esd/objectarx/2024/objectarx-for-autocad-2024-win-64bit-dlm.sfx.exe

  • ObjectARX Wizards 2024:
    备用下载:https://raw.githubusercontent.com/ADN-DevTech/ObjectARX-Wizards/ForAutoCAD2024/ObjectARXWizardsInstaller/ObjectARXWizard2024.zip

将 SDK 解压到无中文无空格的路径,例如 G:\ARX_SDK\ObjectARX_2024 。


4. 安装 ObjectARX SDK

  1. 双击下载的 .exe 文件。

  2. 选择解压路径(推荐 G:\ARX_SDK\ObjectARX_2024 或 C:\ObjectARX\2024)。

  3. 解压后确认存在 inc、lib-x64、samples、docs 文件夹。

  4. 不要移动或重命名该文件夹。


5. 安装 ObjectARX Wizards(关键步骤)

5.1 解压 Wizard 安装包,得到 ObjectARXWizard2024.msi。

5.2 以管理员身份运行命令提示符:

  • 按 Win,输入 cmd,右键“以管理员身份运行”。

  • 输入 cd /d "你的msi所在目录" (例如 cd /d D:\Downloads)

  • 执行:msiexec /package ObjectARXWizard2024.msi

5.3 安装过程中的选项:

  • RDS 符号:随便填,如 MYDEV

  • ObjectARX SDK location:浏览选择第4步解压的 SDK 根目录

  • AutoCAD location:浏览选择 AutoCAD 2024 安装目录(如 G:\Program Files\Autodesk\AutoCAD 2024)

  • 一路 Next 直到 Finish

5.4 安装后重启电脑。

5.5 验证:打开 VS2022,创建新项目,搜索 ObjectARX,应看到“ARX/DBX Project For AutoCAD 2024”模板。

5.6 如果模板不出现,手动修正:

  • 以管理员身份用记事本打开:
    C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\vcprojects\Autodesk\ArxAppWiz2024.vsz

  • 将其中的 ABSOLUTE_PATH = [TARGETDIR]ArxAppWiz 改为:
    Param="ABSOLUTE_PATH = C:\Program Files (x86)\Autodesk\ObjectARX 2024 Wizards\ArxAppWiz"

  • 同理修改 ArxAppWizOMF2024.vsz,末尾改成 ArxAppWiz182。

  • 保存后重启 VS。


6. 配置 Visual Studio 2022 必要组件

6.1 打开 Visual Studio Installer,找到 VS2022,点击“修改”。

6.2 在“工作负荷”中勾选“使用 C++ 的桌面开发”。

6.3 切换到“单个组件”,搜索 MFC,勾选“适用于最新 v143 生成工具的 C++ MFC (x86 和 x64)”。

6.4 点击“修改”,等待完成,然后重启 VS2022。


7. 创建第一个 ARX 项目

  1. 启动 VS2022,点击“创建新项目”。

  2. 搜索 ObjectARX,选择“ARX/DBX Project For AutoCAD 2024”。

  3. 项目名称:ArxHelloWorld,位置:G:\ARX_Projects,点击“创建”。

  4. 在向导中:

    • Application Type:ObjectARX (AutoCAD Extension)

    • MFC Support:No MFC Support

    • COM Options、.NET Options:全部默认

  5. 点击 Finish。


8. 项目属性检查与修改(Release x64 配置)

右键项目 → 属性,左上角配置选 Release,平台选 x64。

8.1 常规

  • 配置类型:动态库 (.dll)

  • MFC 的使用:在静态库中使用 MFC

  • 平台工具集:Visual Studio 2022 (v143)

  • C++ 语言标准:ISO C++17 标准 (/std:c++17)

8.2 高级

  • 目标文件扩展名:.arx

8.3 VC++ 目录

  • 包含目录:添加 SDK 的 inc 和 inc-x64 路径

  • 库目录:添加 SDK 的 lib-x64 路径

8.4 C/C++ → 预编译头

  • 预编译头:不使用预编译头 (可选)

8.5 C/C++ → 代码生成

  • 运行库:多线程 (/MT)

8.6 C/C++ → 所有选项 → 较小类型检查

  • 设置为:否(/RTCc-)

8.7 链接器 → 常规 → 输出文件

  • 设为:(OutDir)(OutDir)(TargetName).arx

8.8 链接器 → 输入 → 附加依赖项

  • 添加:rxapi.lib; acdb.lib; aced.lib; acge.lib; acad.lib

8.9 链接器 → 高级 → 目标计算机

  • 设置为 MachineX64

点击确定保存。


9. 编写 Hello World 代码

推荐使用宏自动注册(最简单)。

打开 acrxEntryPoint.cpp,将内容替换为以下代码:

cpp

复制

下载

// acrxEntryPoint.cpp #include "StdAfx.h" #include "resource.h" class CArxHelloApp : public AcRxArxApp { public: CArxHelloApp() : AcRxArxApp() {} virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) { AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt); // 初始化代码(可选) return retCode; } virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) { AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt); return retCode; } virtual void RegisterServerComponents() {} // 命令函数:组名 ADSKMyGroup,命令名 xx → 函数名 ADSKMyGroupxx static void ADSKMyGroupxx() { acutPrintf(L"\nHello World from ObjectARX!"); } }; IMPLEMENT_ARX_ENTRYPOINT(CArxHelloApp) // 注册命令:在 CAD 中输入 xx 即可调用 ACED_ARXCOMMAND_ENTRY_AUTO(CArxHelloApp, ADSKMyGroup, xx, MyCommandLocal, ACRX_CMD_MODAL, NULL)

如果项目要求 StdAfx.h 且为空,可以创建一个空的 StdAfx.h 文件(内容可为空)。


10. 编译生成 .arx 文件

  1. 工具栏选择 Release 和 x64。

  2. 菜单:生成 → 清理解决方案。

  3. 生成 → 重新生成解决方案。

  4. 输出窗口应显示:...\x64\Release\ArxHelloWorld.arx

  5. 进入该目录,确认 .arx 文件存在。


11. 设置 AutoCAD 信任路径

  1. 启动 AutoCAD 2024。

  2. 输入 OPTIONS 回车。

  3. 文件选项卡 → 受信任的位置 → 添加。

  4. 添加你的输出文件夹,例如 G:\ARX_Projects\ArxHelloWorld\x64\Release

  5. 应用、确定。

  6. (可选)输入 SECURELOAD 设为 0 临时允许加载。


12. 加载并运行命令

  1. 在 AutoCAD 命令行输入 AP 或 APPLOAD 回车。

  2. 选择你的 .arx 文件,点击加载。

  3. 出现安全提示时选择“始终加载”。

  4. 加载成功后关闭对话框。

  5. 输入命令 xx 回车。

  6. 命令行显示:Hello World from ObjectARX!

🎉 成功!


13. 常见错误大全

编译时错误:

  • #error: /RTCc rejects conformant code → 项目属性中关闭较小类型检查。

  • error MSB8041: 需要 MFC 库 → 通过 VS Installer 安装 MFC 组件。

  • 无法打开源文件 "StdAfx.h" → 关闭预编译头或创建空的 StdAfx.h。

  • 未定义标识符 "ACRX_API_VERSION" → 手动添加 acrxGetApiVersion 函数返回 1。

  • 未定义标识符 "_T" → 改用宽字符串 L"..."。

  • "ADSKMyGroupMyCommand1" 不是成员 → 确保函数名 = 组名+命令名。

  • 无法解析的外部符号 _hdllInstance → 在代码中添加 HINSTANCE _hdllInstance = NULL;

  • 多重定义 → 只保留一个 cpp 文件包含入口点。

加载时错误:

  • acrxGetApiVersion 未找到 → 确认导出该函数,用 dumpbin /exports 检查。

  • AcRxDynamicLinker 加载失败 → 检查信任路径、位数、MFC 静态链接。

  • 未知命令 → 确认插件加载成功,检查命令名是否正确。

  • 模块与 AutoCAD 版本不兼容 → 使用匹配的 SDK。


14. 完整代码清单

手动注册版本(更灵活,不依赖宏命名规则):

cpp

复制

下载

// acrxEntryPoint.cpp #include "StdAfx.h" #include "resource.h" #include "aced.h" #include "rxregsvc.h" HINSTANCE _hdllInstance = NULL; extern "C" int acrxGetApiVersion() { return 1; } static void MyHelloCommand() { acutPrintf(L"\nHello World from ObjectARX!"); } class CArxHelloApp : public AcRxArxApp { public: virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) { AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt); acedRegCmds->addCommand(L"MYGROUP", L"xx", L"xx", ACRX_CMD_MODAL, MyHelloCommand); return retCode; } virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) { acedRegCmds->removeGroup(L"MYGROUP"); return AcRxArxApp::On_kUnloadAppMsg(pkt); } }; IMPLEMENT_ARX_ENTRYPOINT(CArxHelloApp) // 不要同时使用 ACED_ARXCOMMAND_ENTRY_AUTO 宏

15. 进阶提示

  • 调试:使用 Debug x64 配置,运行库选 /MDd,F5 启动 AutoCAD 并打断点。

  • 学习示例:SDK 解压后的 samples 文件夹有大量示例。

  • 文档:docs\arxref.chm 是 API 参考手册。

  • 绘制直线:在命令函数中使用 acedCommand(RTSTR, L"LINE", RTSTR, L"0,0", RTSTR, L"100,100", RTSTR, L"", 0);

http://www.gsyq.cn/news/1418673.html

相关文章:

  • 从《星露谷物语》到你的项目:用Unity ScriptableObject设计一个可扩展的合成与交易系统
  • PLC数据对接MES,有哪几种方式?HTTP、MQTT、OPC UA怎么选
  • 探访TeraWulf 750MW AI数据中心:建设速度达到“中国水平“
  • 免费服务器指南:GitHub Pages搭建静态网站全攻略
  • 26HVV护网行动 初 中 高 级人员招聘
  • 测试左移 + 右移 + 自动化,三位一体构建质量护城河
  • 别再只仿真了!用100个三极管在面包板上还原4位加法器,我总结了这些避坑指南
  • CentOS环境下手动升级openssl、openssh
  • RTX51 Tiny调试技巧与C源代码显示问题解析
  • RTX51 Tiny在SiLABS SFR分页机制下的移植优化
  • 深入UGUI底层:手把手教你用OnPopulateMesh和顶点偏移,实现Image的任意变形(不只是倾斜)
  • 用 Nerfstudio 和手机照片,5分钟快速生成你的第一个 3D 数字手办(Nerfacto 模型实战)
  • 从一次“幻觉”到一次“进化”:AI事实核查错误的深度剖析与系统改进启示
  • 从状态检查到数据备份:仓储PLC控制器保养周期与实操清单
  • 效率拉满!VS Code 安装 Qoder CN(原通义灵码)详细教程
  • 别再只关RST了!深入聊聊Intel快速存储技术(RAID)与Ubuntu/Linux的‘爱恨情仇’
  • 10427条密码产品证书全部收集到,我发现几个数据跟认知完全对不上
  • Jetson Orin Nano + DeepStream 6.2 实战:将YOLOv5模型集成到生产级视觉流水线
  • 如何查物种的12S基因片段是否存在于NCBI公共数据库?
  • 别再傻傻用软件SPI了!实测STM32硬件SPI驱动GC9A01屏幕,速度提升10倍(附完整代码)
  • 从音响制造到AI家庭娱乐生态:不见不散AI智能K歌音响亮相第二十届深圳国际金融博览会
  • 手把手教你用阿里云服务器本地部署AWS DeepRacer训练环境(避坑指南)
  • 量子采样经典算法:突破NISQ时代组合优化瓶颈
  • docker 实战:将一个多组件应用完整容器化
  • 亚控组态数据导出踩坑实录:报表保存为Excel时文件名乱码、数据错位的解决办法
  • Unity游戏特效实战:用LineRenderer复刻红警磁暴闪电(附完整C#源码)
  • STM32CubeMX外部中断实战:从按键消抖到串口打印,一个完整项目带你避坑
  • 0105【天尊法典】晶体管微缩路径全域锁死:脱离尺寸缩减,算力提升的全域实证与唯一解法
  • Lua 协程:从 API 到底层原理再到 Skynet 架构的完整学习路径
  • Sora 2多视角时空对齐难题攻克,360°视频生成延迟降至117ms——内部Benchmark独家解析