最近更新于 2026-04-15 17:14
环境
- AutoCAD Mechanical 2026
- ObjectArx 2026
- VS 2022
环境搭建参考:https://blog.iyatt.com/?p=21187
方案
API
virtual Acad::ErrorStatus sendStringToExecute(
AcApDocument* pAcTargetDocument,
const ACHAR * pszExecute,
bool bActivate = true,
bool bWrapUpInactiveDoc = false,
bool bEchoString = true
) = 0;
这个函数用于将命令字符串发送到目标文档并执行。
- pAcTargetDocument:接收输入指令的文档对象
- pszExecute:作为输入发送并执行的指令文本
- bActivate:指示是否激活目标文档
- bWrapUpInactiveDoc:指示在切换活动文档时,是否将当前活动文档挂起,并在下一次 OnIdle()(空闲)时完成
- bEchoString:指示发送的字符串是否显示在命令行中
示例
我这里实现了通过点击 List Control 报表执行对应命令,就是用这个 API 来调用已注册的命令。

下面是我项目中的代码片段。
①curDoc() 用于获取当前打开状态的图纸对象。
②命令前加英文句点时,会调取原生命令,而不会调用用户自己定义的命令(比如用户自己写了同名命令替换 AutoCAD 的原生命令)。
③命令前加下划线时,会调用通用命令,而不是本地命令。
AutoCAD 命令注册函数时,需要传入两个命令名,cmdGlobalName 就是全球通用名,cmdLocaleName 就是本地名。
全球通用名在不同语言的 AutoCAD 中都能执行,而本地名在不同语言下有可能不同。假设直线绘制命令 Line 是通用名,在中文版 CAD 可能叫 绘制直线。
我自己实现的命令是把两个命令名设为一样的,纯英文命令是最方便输入的,中文命令要用输入法效率会更低。

④可以在命令后加一个空格或换行符作为确认执行符号。建议使用换行符,比如下面的例子卸载插件:首先执行 ARX 命令,然后选择 U 选项,然后输入插件路径确认。输入路径这里如果使用空格的话则无效,路径输入状态下按空格会输入空格,只有用换行符才能确认。
注:acedGetAppName() 可以用于获取插件自己的文件路径。

ObjectARX 2026(C++)执行已注册命令的方案
