简介:针对Visual Studio 2008中ObjectArx工具条图标不显示的问题,这份小巧工具包专门给AutoCAD二次开发人员排忧解难。它本质上是ObjectARX Wizards for AutoCAD 2010的中文语言包补件,按描述把压缩包中的内容释放到C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2010\ArxAddInWiz目录下,即可让缺失的图标重新出现,恢复向导的正常操作。整个压缩包仅3个文件、6KB大小,包含1个resources.dll资源文件以及2个xml配置文档,其中dll负责承载本地化界面文本与图标资源,两个xml分别定义了工程向导中类列表和类方法分组的结构,文件虽少但分工明确。当前已有452人学习下载,适合刚接触ObjectArx向导或遇到过VS2008中工具条异常消失的开发者。借助这份补丁,可以省去手动查找并注册资源文件的麻烦,快速恢复完整工具栏,正常调用类与方法面板,同时也能帮助理解ObjectArx向导的资源加载机制,对后续AutoCAD二次开发环境的搭建与排错都有直接参考价值。
1. 装ObjectARX的zh-chs包:一个语言包让我差点重装整套SDK
某开发者接手一个模拟项目X的CAD插件开发任务,环境是英文版某商业CAD平台,ObjectARX SDK装得挺顺利,编译示例也过了。结果想给SDK补个zh-chs语言包,照着网上零星的说法把文件往目录里一拖,再打开IDE里的ObjectARX向导,模板没了;再编译工程,头文件路径全乱。折腾一晚上,最后不得不把SDK整个卸掉重来。
安装ObjectArx的zh-chs包这件事,难点从来不是“解压后复制进去”,而是先搞清楚这个语言包该和哪个版本的ObjectARX匹配、该放进哪个子目录、要不要动环境变量、以及复制时怎么不把原有英文文件覆盖坏。如果你正卡在“装完后文档仍显示英文”“向导模板消失”“编译报找不到头文件”这几个问题上,这篇就是照着踩坑记录写的安装笔记。下面从零开始,按“先看环境、再做合并、最后验证”的顺序走一遍完整流程。
2. 装之前:ObjectARX的版本形态与zh-chs包的对应关系
2.1 先搞清ObjectARX SDK装在哪个目录
ObjectARX不是单独下载的独立SDK,它通常随某商业CAD平台主程序一起安装,默认路径一般在主程序安装目录下的ObjectARX子文件夹里。常见形态是:
C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\ ├── docs\ # 二次开发文档(HTML为主) ├── inc\ # 头文件(acad.h、dbx.h、rxapi.h等) ├── lib\ # 静态库与引入库 ├── samples\ # 示例工程(含.sln) ├── utils\ # 工具,含向导、打包脚本 └── classmap\ # 类层次图(部分版本有)我一般会先确认这个目录真实存在,再谈装语言包的事。很多“安装失败”案例其实是ObjectARX压根没装全——主程序装了,但SDK组件被漏选,目录里只有零星几个文件夹。你可以先看inc目录里有没有acad.h,没有的话后面一切安装动作都无从谈起。
另外注意一点:ObjectARX目录名里通常带年份或者版本号,这个年份要和主程序版本一致。zh-chs包是针对特定大版本的,跨版本混用是后续向导消失、编译报错的头号原因。
2.2 zh-chs包与主程序版本、编译器版本的匹配关系
某个版本的ObjectARX SDK,对应某个年份的CAD主程序,并且绑定一个相对固定的Visual Studio主版本。zh-chs包作为语言资源,它的匹配关系分成两层:
| 匹配对象 | 匹配要求 | 不一致时典型表现 |
|---|---|---|
| zh-chs包 vs ObjectARX版本 | 语言包内部资源版本号需与SDK一致 | 安装时提示找不到ObjectARX目录 |
| ObjectARX版本 vs CAD主程序版本 | SDK随主程序版本发布 | 编译出的.arx无法被CAD加载 |
| ObjectARX版本 vs VS版本 | inc/lib的编译器兼容性按VS主版本划分 | 链接器报LNK2038或平台工具集错误 |
具体年份对应哪个VS主版本,官方文档里有张兼容表,但更实用的判断方法是:直接打开samples目录下任意一个示例的.sln,看解决方案里写的VS版本号,那就是这套SDK配套的版本。不要自己凭感觉去VS安装器里挑版本,某开发者第一次装ObjectARX时用VS的一个新版本去编译,结果lib里到处是“unresolved external symbol”。
2.3 动手前先做的三个检查命令
建议在安装zh-chs包之前,先记录当前环境状态,方便出问题时回退。在Windows命令行里执行下面三条:
where acad.exe dir "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\inc\acad.h" ver说明一下:
where acad.exe可能找不到,因为主程序不一定在PATH里,找不到就查一下常见安装路径,确认主程序装在哪。dir命令检查头文件是否齐全,inc\acad.h存在说明SDK核心组件在位,可以继续。ver只显示Windows版本,真正要记的是VS版本——打开示例的.sln就能看到。
这三个命令不是走形式。把输出的路径和版本号存成文本文件,后面装完zh-chs包再对照一次,能立刻知道是不是动到了不该动的文件。
3. 安装ObjectARX的zh-chs包:备份、合并、切换语言三步走
3.1 第一步:备份docs目录,保留一份英文原始结构
zh-chs包不是覆盖式安装包,它更像一个语言资源增量包。大多数情况下,包内是一个和ObjectARX目录结构对应的子目录树,里面装的是中文版文档、本地化后的资源文件,以及向导模板的简体中文版本。
先备份再动手,这个习惯能救命。用robocopy做镜像式备份,只备份docs和utils两个目录,这两个是最容易被覆盖坏的地方:
robocopy "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\docs" "D:\backup\arx_docs_backup" /E /COPY:DAT /R:1 /W:1 robocopy "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\utils" "D:\backup\arx_utils_backup" /E /COPY:DAT /R:1 /W:1参数说明:
/E:复制所有子目录,包括空目录。zh-chs包合并后可能产生新空目录,备份时把原空目录也保留,恢复时才不会缺结构。/COPY:DAT:只复制数据、属性、时间戳,不复制安全属性,避免备份文件出现权限问题。/R:1 /W:1:失败时重试1次,每次等1秒。目录里可能有被占用的HTML文档,重试次数设少一点,快速跳过坏文件。
备份完成后,建议再生成一份目录树清单:
tree /F "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\docs" > D:\backup\docs_tree.txt这份txt后面有大用处:合并zh-chs包时,如果包内目录结构与现有docs不一致,对照清单能立刻看出哪个子目录是新增的、哪个是原有的。别嫌麻烦,某开发者就靠这份清单定位过一次SQL脚本执行错误——当然那是另一个项目里的故事,在ObjectARX这里,它帮你区分“该覆盖的”和“不该碰的”。
3.2 第二步:把zh-chs包按原目录结构合并进去
zh-chs包解压后,假设它的根目录叫zh-chs,里面有docs、utils、inc、lib等子目录。合并原则是“按目录结构对号入座”,不是把文件全部往ObjectARX根目录一倒了事。
以docs为例,zh-chs包里的路径一般是zh-chs\docs\与现有ObjectARX 202x\docs\对应。推荐用xcopy按目录合并:
xcopy "D:\downloads\zh-chs\docs\*.*" "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\docs\" /E /Y xcopy "D:\downloads\zh-chs\utils\*.*" "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\utils\" /E /Y参数说明:
/E:复制所有子目录,包括空目录。/Y:直接覆盖同名文件。这里有个取舍——如果zh-chs包内置了旧的英文文件名,覆盖后会变成中文内容但文件名不变;如果包内密文件与现有docs里的英文版同名,覆盖后html文档会整体替换成中文版。- 如果包内还有
inc或lib目录,不建议用/Y直接覆盖。这两个目录下文件由编译器按名引用,错一个字符编译就挂,宁可保留英文版头文件,zh-chs包只补新增说明文件。
为什么不建议把整个zh-chs包直接复制进ObjectARX根目录?因为包根目录里可能还带一份README或安装说明文件,直接复制会把这几个零散文件落到SDK根目录,看着很干净,实际上污染了目录结构,后面VS向导扫描时多一步识别,容易出幺蛾子。
3.3 第三步:切换向导模板的语言读取路径
docs和utils合并完后,zh-chs包的核心资源已经就位,但VS向导默认读取的语言可能还是英文。向导模板一般放在utils目录下的某个子文件夹里,某些版本支持按语言子目录区分,某些版本是单一模板文件、靠语言标识符切换。
常见做法是检查模板目录下是否有zh-CN或zh-CHS开头命名的子目录。如果有,把模板目录里的语言配置文件指向这个子目录:
notepad "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\utils\ObjectARXWiz\ObjectARXWiz.ini"在配置文件中找到类似Language=ENU的行,改成Language=CHS或Language=zh-CN,保存退出。具体键名因版本而异,有的写LocaleId,有的写ResourceDll,打开文件后搜索Language或Lang单词就能定位。
这里要特别说明一下:这个.ini文件可能压根不存在,或向导模板以VSIX插件形式存在。VSIX形式的向导装完zh-chs包后不需要手动切语言,它内部自带多语言资源,跟随VS界面语言自动切换。如果你用的是VSIX版本,跳过修改ini文件这一步,直接看导航器里的模板名是否变成中文。
3.4 环境变量与VS集成:让模板出现在“新建项目”里
zh-chs包合并完,还需要确保ObjectARX的环境变量和VS项目模板指向正确路径。环境变量这块不是每个版本都必需,但设置好之后能省掉后面很多手动指定路径的麻烦。
需要关注的有三个变量:
set ARX_SDK_ROOT=C:\Program Files\某商业CAD平台\202x\ObjectARX 202x set ARX_INC_DIR=C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\inc set ARX_LIB_DIR=C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\lib这三个变量名不一定是官方标准名,不同版本可能叫ObjectARX_HOME或者干脆不用环境变量、全靠VS项目属性里的硬编码路径。设置方式选用户级环境变量即可,不必动系统级PATH:
setx ARX_SDK_ROOT "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x"注意点:
setx设置的是永久环境变量,新开的命令行窗口和VS进程才生效,已经开着的VS要重启才能读到。- 如果你的zh-chs包安装说明里没有提环境变量,我的建议是不用额外加。加上去反而可能覆盖VS项目属性里已有的正确路径,导致原本能编译的工程反而编不过。
- VS集成验证方式是打开VS,“新建项目”里如果能看到ObjectARX相关模板,说明向导已经注册成功,zh-chs包的 .vsix或模板文件被正确读取。
4. 常见问题排查:zh-chs装完不生效与覆盖破坏的五个坑
4.1 现象:VS里找不到ObjectARX向导模板
装完zh-chs包后重启VS,“新建项目”里原来的ObjectARX向导不见了,或者只显示英文模板,中文模板失踪。
原因大概率是合并utils目录时,覆盖掉了原来的模板注册文件,或者向导模板的vsix扩展在文件变动后被VS标记为已损坏,自动禁用了。
解决思路是先别再乱复制文件,打开VS的“扩展管理器”或“已安装的扩展”,看ObjectARX相关扩展是否处于“已禁用”状态,重新启用并重启VS。如果扩展列表里压根没有,从备份的utils目录里恢复注册文件,再不行就重新双击zh-chs包内自带的vsix文件手动注册。某开发者遇到过一种情况:zh-chs包里的vsix是给某特定VS版本用的,装到另一个版本上直接提示“不兼容”,此时只能找与VS版本匹配的包,硬装只会让VS识别不到模板。
4.2 现象:编译示例工程时报错,找不到adlink.h或rxapi.h
编译任何示例,头文件阶段报cannot open include file: "adlink.h",或者rxapi.h: No such file or directory。
原因一般有两个:一是zh-chs包合并时把inc目录下的头文件覆盖了,但覆盖后的文件内容不完整;二是VS工程文件的包含目录指向了某个不存在或错误的路径,而这个路径在装包之前就是对的。
排查方法:先打开工程属性,查看“C/C++ → 常规 → 附加包含目录”,确认路径指向ObjectARX 202x\inc。如果路径正确,用备份恢复整个inc目录,再编译一次。inc目录里的头文件带版本校验宏,用错版本的头文件会引出一连串编译错误,而且报错位置随机,极难定位。
4.3 现象:docs里的中文文档打不开,点链接报404
合并完zh-chs包后,打开docs目录下的HTML文档,页面显示英文,或者内部链接跳转后404。
这有两种情况:如果文档内容还是英文但页面排版正常,说明zh-chs包的中文资源没有被读取,向导或文档首页的索引仍指向英文文件;如果点开链接404,多半是包内文档目录结构与现有docs不一致,导致相对路径失效。
解决做法是我上面提到的“对照目录树”。先看zh-chs包解压后的docs子目录结构,再用备份的docs_tree.txt对比现有docs结构,把每个子文件夹名称对齐成一致。文档链接是按相对路径写的,有一处目录名不一致,整棵树的链接就断。
4.4 现象:zh-chs包安装程序提示找不到ObjectARX目录
有些zh-chs包带自动安装程序,执行后立刻报“未检测到ObjectARX SDK安装目录”。
原因通常不是SDK没装,而是安装程序从注册表读取SDK安装路径,而你的SDK是绿色解压版或手动指定路径装的,没有写入注册表,安装程序自然找不到。
解决步骤:先别急着改注册表,手动把ObjectARX路径填进安装程序的输入框里,大多数安装程序允许自定义路径。如果安装程序不提供输入框,只能把SDK移动到它默认查找的目录下重新执行一次安装;或者手动将解压后的zh-chs包按第3章的合并流程操作,绕过安装程序,直接复制文件。
4.5 现象:界面变中文了,但示例工程链接时一堆LNK2038
docs和向导都正常,中文也出来了,结果编译samples里的示例,链接阶段报一堆LNK2038 mismatch detected for RuntimeLibrary。
这个坑最隐蔽。ObjectARX的lib是按VS主版本和运行库方式分别编译的,zh-chs包如果误把lib目录里的文件也覆盖了,覆盖后的lib可能是另一个编译器版本,和工程属性里设置的运行库对不上,于是链接冲突。
排查思路:用备份检查lib目录下文件的修改时间。如果合并包时没有动lib目录(按我第3章的建议,是不建议动inc和lib的),那么报错基本来自工程配置本身——把解决方案配置从Debug切到Release,或者把“代码生成 → 运行库”从/MT切到/MD,按ObjectARX官方示例的默认配置调整后再链接。改完后要清理解决方案再重新生成,不能只点增量编译,否则stale object还会带着旧设置继续报错。
5. 装完怎么验证跑通:从向导到编译示例的一条龙验证
装完zh-chs包、改完设置后,必须验证三件事:资源确实生效、向导可用、编译能通过。不验证就等于白装。
先验证语言资源是否落地。在ObjectARX目录的docs下打开一个以“zh”或“chs”结尾的HTML文件,查看页面标题和内容是否已中文化。如果还是英文,检查docs目录里是否存在与包内对应的中文资源文件,路径是否一致。
再验证向导模板。重启VS,用“新建项目”搜索ObjectARX关键词,确认能看到中文向导模板,确认模板名称不再是英文缩写。用这个模板新建一个最小工程,如果模板本身能正常生成项目骨架,说明zh-chs包的向导部分已经注册成功,不需要手动改ini文件。
最后验证编译与加载链路。以ObjectARX自带的示例工程为例,在VS里打开samples目录下任意一个示例,把解决方案配置调整为Release/x64,执行一次完整生成:
msbuild "C:\Program Files\某商业CAD平台\202x\ObjectARX 202x\samples\模拟项目X\模拟项目X.vcxproj" /p:Configuration=Release /p:Platform=x64生成成功后,把输出的.arx文件复制到某商业CAD平台可搜索到的路径下,或者在CAD命令行里用netload命令加载:
netload "D:\release\模拟项目X.arx"如果加载后命令行提示模块加载成功,不报“无法找到模块”或“入口点错误”,整个zh-chs包安装和配置链路才算真正跑通。
从那以后我再装任何语言包,都会强制走一遍“先备份目录树、再合并、最后编译验证”的流程。尤其是ObjectARX这种自带编译器敏感资源的SDK,任何一步跳过去,后面都会用更难看的方式补回来。希望这篇安装笔记能帮你少走一轮弯路。
本文还有配套的精品资源,点击获取