AutoCAD 2026 ObjectARX(C++)开发环境搭建

最近更新于 2025-08-08 17:13

基本环境

  • Windows 11 24H2
  • AutoCAD Mechanical 2026
  • Visual Studio 2022(需要安装“C++ 桌面开发”,建议右侧手动增加勾选“MFC”)

验证基于 AutoCAD 2025 ObjectARX(C++)开发环境搭建:https://blog.iyatt.com/?p=16480

开发环境配置

资源下载安装

ObjectARX SDK 下载安装

ObjectARX SDK 2026 下载地址:https://aps.autodesk.com/developer/overview/autocad-objectarx-sdk-downloads
file

下载后运行,这是一个自解压程序,自己选择一个路径,注意记下这个路径,后续需要用到。我这里就释放到 C:\ObjectARX2026
file

解压完就自动退出了,
file

在设置的解压路径下的 CDROM1 文件夹下可以看到 ObjectARX 的相关文件
file

Wizard Wizards 下载安装

ObjectARX Wizards 2026 下载地址:https://aps.autodesk.com/developer/overview/autocad
直接点 Download 下载最新版,当前就是 2026 版。下载历史版本就展开“Download past ObjectARX Wizards”
file

下载的是 zip 压缩文件,自己解压后,可以看到 msi 安装程序
file

右键复制文件地址
file

Win键打开开始菜单,输入 cmd 搜索,以管理员身份运行
file

在 cmd 中点击右键,会把路径粘粘进去,回车执行
间接实现以管理员身份运行 msi 安装程序,如果不以管理员身份运行安装,安装设置的参数会无效,后面 VS 创建项目的时候会卡在创建页,无法继续下一步
file

点 Next 进入下一步
file

看到下面界面
file

  • 第一个框 RDS symbol(Registered Developer Symbol)相当于是是一个开发者标识,后面编译程序的时候会把这个标识插入程序文件名的开头,这样即使不同开发者对自己的扩展程序取了同样的名字,但是开发者标识不一样也可以区分。填写很讲究,要考虑文件命名、C++ 标识符命名同时满足的规则,因为这个 RDS 会出现在文件名中,还会出现在代码中,要是填写了不允许的字符,编译的时候就会报错了。比如我自己用的名字是 IYATT-yx,这里就填写的 IYATTyx,因为 C++ 标识符不允许 – 符号,只能是字母、数字、下划线,且不能以数字开头。
  • 第二个框填的路径和前面 ObjectARX SDK 解压的路径有关,在前面解压路径的基础上再加上 CDROM1。比如前面我选的解压路径是 C:\ObjectARX2026,这里就要填成 C:\ObjectARX2026\CDROM1
  • 第三个框填 AutoCAD 可执行文件的路径,可以选中快捷方式,按Alt+Enter打开属性,点击打开文件所在的位置,复制地址栏的路径即可

file

file

填好后点 Next 进入下一步,点 Install Now 开始安装
file

安装完成点 Close 关闭
file

改进设置

上述操作安装了 SDK 和 Wizards,SDK 是开发依赖的库文件,Wizards 提供了 VS 项目创建模板。
虽然 Wizards 提供的模板已经让开发者省去自己配置库链接等一系列的工作,可以做到创建好项目就能直接写代码编译,但调试仍然不方便,启动调试只是会自动打开 CAD,加载插件要手动操作。
下面我提供了方案实现调试时自动加载,另外还有其它错误项纠正、改进优化设置。

调试运行时 CAD 自动加载程序(建议)

默认的模板调试启动可以自动启动 CAD,但是不会自动加载程序,这样还要手动去加载程序调试,显得麻烦,我提供了一套自动加载的方案。

修改 Wizards 创建项目时执行的源码

以管理员身份编辑 "C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxAppWiz\Scripts\1033\default.js"

找到 return oProj;
file

在他的前面行插入下面代码

    // 创建 scr 脚本
    /////////////////////////////////////////////

    // 写 scr 文件
    function writeScrFile(filename, content)
    {
      var fso = new ActiveXObject("Scripting.FileSystemObject");
      var startScrPath = strProjectPath + "\\" + filename;
      var startScrFile = fso.CreateTextFile(startScrPath, true);
      startScrFile.Write(content);
      startScrFile.Close();
    }

    // 确定程序扩展名
    var extension = "";
    if (wizard.FindSymbol("APP_ARX_TYPE")) {
      extension = ".arx";
    } else if (wizard.FindSymbol("APP_DBX_TYPE")) {
      extension = ".dbx";
    } else if (wizard.FindSymbol("APP_CRX_TYPE")) {
      extension = ".crx";
    } else {
      extension = ".arx";
    }

    debugFilename = "debug.scr"; // 调试版脚本
    releaseFilename = "release.scr"; // 发布版脚本

    var debugContent = "ARX L " + "\"" + strProjectPath + "\\x64\\Debug\\" + wizard.FindSymbol("RDS_SYMB") + strProjectName + extension + "\" ";
    var releaseContent = "ARX L " + "\"" + strProjectPath + "\\x64\\Release\\" + wizard.FindSymbol("RDS_SYMB") + strProjectName + extension + "\" ";

    writeScrFile(debugFilename, debugContent);
    writeScrFile(releaseFilename, releaseContent);
    /////////////////////////////////////////////

file

修改属性模板

以管理员身份编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2026.props

查找关键词 LocalDebuggerCommand。将它所在的 PropertyGroup 删除掉
file

然后在删除的位置插入下面内容

    <PropertyGroup Condition="'$(Configuration)'=='Debug'">
        <!-- Local Windows debugger -->
        <LocalDebuggerDebuggerType>Auto</LocalDebuggerDebuggerType>
        <LocalDebuggerCommand>$(AcadDir)$(AcadExe)</LocalDebuggerCommand>
        <LocalDebuggerCommandArguments>/nologo /b $(ProjectDir)debug.scr</LocalDebuggerCommandArguments>
        <LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)'=='Release'">
        <!-- Local Windows debugger -->
        <LocalDebuggerDebuggerType>Auto</LocalDebuggerDebuggerType>
        <LocalDebuggerCommand>$(AcadDir)$(AcadExe)</LocalDebuggerCommand>
        <LocalDebuggerCommandArguments>/nologo /b $(ProjectDir)release.scr</LocalDebuggerCommandArguments>
        <LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
    </PropertyGroup>

file

添加信任

程序没有签名证书,一加载就会问是否允许,这就很麻烦,可以把项目开发目录添加 CAD 信任,这样就会直接执行加载了
file

打开 AutoCAD,新建图纸。执行 OP 命令打开选项,切换到系统选项卡
file

点击安全选项,
file

复制要添加信任的目录,比如我这里要添加我的开发目录 C:\work\development。然后在安全选项页面 ,点击添加输入路径,另外在路径后加 \…,比如我这里就要填写 C:\work\development\…。后面加三点后,就会信任这个路径及它的子目录,不加三点只信任这个路径下一层,不信任子目录。填写后,点确定,可以关闭 AutoCAD。
file

关闭较小类型检查(必要)

VS 中 Debug 默认开启了较小类型检查,但这不是被 C++ 标准库支持的
file
编译会导致报错C1189 /RTCc rejects conformant code
file

这里需要修改 Wizards 的项目模板,以实现默认关闭较小类型检查,避免每次创建项目后需要去改。
以管理员身份编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2026.props,可以以管理员身份运行记事本,再用记事本编辑。
Project 层内找到一个空位置,插入下面内容

    <ItemDefinitionGroup>
        <ClCompile>
            <SmallerTypeCheck>false</SmallerTypeCheck>
        </ClCompile>
    </ItemDefinitionGroup>

file

禁用安全检查(可选)

VS 默认开启了安全检查,要是你不用 _s 结尾的安全函数,就会报错。我是不喜欢用安全函数的,也不想每次创建项目后手动修改项目属性,这里就直接修改 Wizards 项目模板。

以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2026.props

Project 层内找到一个空位置,插入下面内容

    <ItemDefinitionGroup>
        <ClCompile>
            <BufferSecurityCheck>false</BufferSecurityCheck>
        </ClCompile>
    </ItemDefinitionGroup>

file

纠正 Wizards 错误

Wizards 在 GitHub 上是开源的,项目地址:https://github.com/ADN-DevTech/ObjectARX-Wizards
已发现的错误我都提交了 PR,至于是否响应我就不知道了。

纠正 StdAfx.h 模板错误

PR:https://github.com/ADN-DevTech/ObjectARX-Wizards/pull/6
file

这个版本的 Wizards 模板里提供的 StdAfx.h 有一处错误,比如我创建了一个项目 ARXPROJECT2,StdAfx.h 文件里在 define 后面少了一个空格,编译就会报错。
file

以管理员身份编辑 "C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxAppWiz\Templates\1033\StdAfx.h"
看到第 28 行,把

#define[!output UPPER_CASE_PROJECT_NAME] _MODULE

改为

#define [!output UPPER_CASE_PROJECT_NAME] _MODULE

就是加一个空格

纠正 DockControlBar 模板错误

PR:https://github.com/ADN-DevTech/ObjectARX-Wizards/pull/7
file

CAcUiDockControlBar 继承自 CAdUiDockControlBar,它们的 Create 函数其中一个明显匹配此处模板的签名为

    BOOL Create (LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
                 DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, 
                 UINT nID, CCreateContext* pContext = NULL);

但是使用 Wizards 模板创建的继承自 CAcUiDockControlBar 的子类中有一段代码如下,代码中将 CString 的 strWndClass 传给 Create 第一个参数,但这个参数要求是 LPCTSTR;这里的子类重写 Create 参数时声明的 lpszTitle 参数类型是 LPCSTR,又把这个参数传给 Create 第二个参数,但 Create 要求这个参数也是 LPCTSTR。
LPCSTR 是仅用于多字节字符集的字符串指针,LPCTSTR 是基于 TCHAR 的字符串指针,可以自适应多字节字符集和 Unicode。

BOOL 子类::Create (CWnd *pParent, LPCSTR lpszTitle) {
    CString strWndClass ;
    strWndClass =AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW)) ;
    CRect rect (0, 0, 250, 200) ;
    if (!CAcUiDockControlBar::Create (
            strWndClass, lpszTitle, WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
            rect, pParent, 0
        )
    )
        return (FALSE) ;

    SetToolID (&clsBar) ;

    // TODO: Add your code here

    return (TRUE) ;
}

以管理员身份编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxWizMFCSupport\Templates\1033\DockControlBar.cpp,将

BOOL [!output CLASS_NAME]::Create (CWnd *pParent, LPCSTR lpszTitle) {
    CString strWndClass ;
    strWndClass =AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW)) ;

改为

BOOL [!output CLASS_NAME]::Create (CWnd *pParent, LPCTSTR lpszTitle) {
    LPCTSTR strWndClass = AfxRegisterWndClass (CS_DBLCLKS, LoadCursor (NULL, IDC_ARROW)) ;

file

以管理员身份编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2026 Wizards\ArxWizMFCSupport\Templates\1033\DockControlBar.h,将

    virtual BOOL Create (CWnd *pParent, LPCSTR lpszTitle) ;

改为

virtual BOOL Create (CWnd *pParent, LPCTSTR lpszTitle) ;

测试

打开 VS,新建一个 ARX/DBX 项目
file

设置项目名称、路径,点击创建
file

这里默认填写的 RDS 就是安装 Wizards 填写的,这里也可以修改,点 Finish 完成创建
file

编辑 acrxEntryPoint.cpp 文件,在 // TODO: Add your initialization code here 注释下写一行代码,添加在这里会在程序被 CAD 加载后即刻执行

acutPrintf(L"\nhello world!\n");

file

F5调试运行,编译后自动启动 CAD,然后自动加载程序到 CAD 中,可以看到下面打印输出了 “hello world!”,代表环境验证成功
file

开发资料

类图

在 ObjectARX 下的 classmap 目录中,有一个 classmap.dwg 文件,这是用 CAD 绘制的类图
file

file

file

文档

在 ObjectARX 下的 docs 目录中存放着 chm 文档
file

AutoCAD 2026 ObjectARX(C++)开发环境搭建
Scroll to top
打开目录