ARX程序的升级及多版本编译须知

Revit多版本代码编译 Revit开发,Visual Studio单份代码和解决方案生成多个版本插件设置Revit二次开发和AutoCAD二次开发一样,都面临着一个很恶心的问题,就是多版本问题。Revit每年出新版本,API的改动虽说最近的几个版本改动不大,但总会有一些被标记为废弃。作为开发者,你也没法要求客户时刻紧跟Revit版本升级,这种情况下,一个插件就得支持好多个Revit版本。一旦有新Revit版本出现,就得有新 阅读详情

转:ARX程序的升级及多版本编译须知

  (2013-11-27 19:25:15)
标签: 

arx

 

版本升级

 

虚函数重载

 
来源:http://bbs.mjtd.com/thread-102486-1-1.html
另,ObjectARX编程参考:http://bbs.mjtd.com/forum-14-1.html

如果你打算升级你的ARX或者想在同一个IDE(譬如vs2010)编译多个版本的ARX,那么我希望这篇帖子对你有帮助
首先你应该简单了解Objectarx开发的版本对应情况:
R15     --- 2000-2002    --- objectarx 2000,2002     --- vc6.0
R16     --- 2004-2006     --- objectarx 2004-2006     --- vc7.0
R17     --- 2007-2009    --- objectarx 2007-2009     --- vc8.0
R18     --- 2010-2012    --- objectarx 2010-2012     --- vc9.0
R19     --- 2013-2014(目前)    --- objectarx 2013,2014     --- vc10.0

1.字符问题
这个是最普遍的问题
R17及其以上版本,必须以UNICODE编译。意味着绝大部分的字符串都应当以_T包围起来,譬如以前写的:
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知acutPrintf ("hello");

代码应当改写为:
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知acutPrintf (_T("hello"));

固然也可以写成
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知acutPrintf (L"hello");

不过这样在多重目标编译时候你不能向下兼容了。
char 的类型需要改成TCHAR类型
然后所对应的跟字符串有关的函数都需要做相对应的修改:
譬如 strcpy 应当改为 _tcscpy ; strcmp要改为_tcscmp;或者相应的unicode函数。
关于如何知道他们想对应的形式,可以用google搜索关键字:
例如 "strcpy msdn"
一般来说第一个链接应该就是:
http://msdn.microsoft.com/zh-cn/library/kk6xf663(v=vs.80).aspx
然后就可以得到相应的

TCHAR.H         _tcscpy
未定义          strcpy
_MBCS           _mbscpy
_UNICODE      wcscpy

因而,你应当包含TCHAR.H
不过一般情况下这个文件已经包含了。

另外在vs2008或者vs2010上编译R16或者以下版本,可能要检查以下编译配置:
C/C++->general-->use UNICODE Response files 这个地方可能要设置为No
C/C++->Treat wchar_t as Built-in Type    这个地方要设置为NO
Linker的General也是如此。

2. for 循环问题

由 vc6升级来的程序,如下for循环可以在vc6下成立:
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知for (int i = 0;i< n;i++)
  2. 转:ARX程序的升级及多版本编译须知{...}
  3. 转:ARX程序的升级及多版本编译须知return i;


但是对于其上版本,不成立,会出现编译错误:
error C2065: 'i' : undeclared identifier
for循环内定义的i一旦放在外面,则视作未定义符号。它的作用域仅仅在于循环内。

因而有两种办法:
第一种:修改代码,把 i定义到循环外面:
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知int i;
  2. 转:ARX程序的升级及多版本编译须知for (i=0;i;i++)
  3. 转:ARX程序的升级及多版本编译须知...

...

第二种:修改C/C++编译配置,把force confromance in for loop scope 修改为NO
建议按第一种来,修改代码,使得符合C++    标准。(VC6只有不到80%的符合C++标准)

3. 4430问题
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整型;但是vs2002及以上不支持默认整型. 这个错

误,解决方法如下:
打开project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430选项。
或者在文件里面(一般来说是stdafx.h)添加 #pragma warning(disable: 4430)

4. 版本定义问题

在一些程序中,必须将
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知#ifndef WINVER                                         
  2. 转:ARX程序的升级及多版本编译须知#define WINVER 0x0400                         
  3. 转:ARX程序的升级及多版本编译须知#endif
  4. 转:ARX程序的升级及多版本编译须知 

修改为
普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知#ifndef WINVER                                         
  2. 转:ARX程序的升级及多版本编译须知#define WINVER 0x0501                         
  3. 转:ARX程序的升级及多版本编译须知#endif

因为有的版本的arx 最低版本为xp,意味着在windows 2000及其以下均不获支持。

5. 模式定义(.def)文件和一些库文件
在R2004的版本 上,基本不需要.def
但如果为使得你的程序向下兼容,可以设置.def,并在附加依赖库上添加rxapi.lib
另外,随着版本的升级,其中 objectarx的一些库文件也发生了变化。需用户自己检查。
在高版本,基本可以不添加什么附加依赖项。

6.如何让多重目标的编译自动适应各个版本:

可以这样做:
在project->BaseClasses properties->configuration->C/C++ ->;Preprocessor (预处理指令)
中添加 ADS = 16 之类,16这里代表版本号R16。
然后在代码中增加如下判断:
#if (ADS<16)
//R2004以下版本执行的代码
#else
//R2004以上版本执行的代码
#endif

7.一些虚函数的变化和升级
譬如在自定义实体时可能碰到的错误:
error C3248: 'AcGiDrawable::worldDraw': function declared as 'sealed' cannot be overridden by

'XXX_Entity::worldDraw'

你应当加如下判断:

普通浏览复制代码保存代码打印代码
  1. 转:ARX程序的升级及多版本编译须知//ADS按照上面设置
  2. 转:ARX程序的升级及多版本编译须知#if(ADS>17)
  3. 转:ARX程序的升级及多版本编译须知        virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *mode) ;       
  4. 转:ARX程序的升级及多版本编译须知        virtual void subViewportDraw(AcGiViewportDraw * mode);
  5. 转:ARX程序的升级及多版本编译须知#else 
  6. 转:ARX程序的升级及多版本编译须知        virtual Adesk::Boolean worldDraw(AcGiWorldDraw *mode) ;      
  7. 转:ARX程序的升级及多版本编译须知        virtual void viewportDraw(AcGiViewportDraw * mode);
  8. 转:ARX程序的升级及多版本编译须知#endif


R18及其以上版本用subWorldDraw代替了worldDraw,等等。

8.预编译头问题。
在一些旧的版本,CPP文件可能都按照默认设置为 Not using precompiled headers (不使用预编译头)
应当改成 Use(/YU),stdafx.cpp改成 Create(/YC)
这样一来可以极大地提高编译速度,二来减少一些升级时带来的问题。
待续。。。

ObjectARX开发环境搭建:跨版本ABI对齐与多版本构建体系 ObjectARX是AutoCAD原生C++插件开发框架,其本质是与宿主进程共享内存、线程和运行时的深度耦合扩展机制。不同于普通DLL,它要求编译器版本、CRT链接方式、Windows SDK、结构体对齐及头库文件指纹严格匹配目标AutoCAD版本——这构成了典型的ABI(应用二进制接口)兼容性问题。技术价值在于规避因堆管理错配、虚函数表偏移、RTTI识别失败等导致的静默崩溃或命令失效。典型应用场景包括设计院多版本协同、市政项目跨年交付、BIM插件批量适配等工程实践需求。本文聚焦ObjectARX环境搭建中 阅读详情

相关推荐

用vs2010编译和调试多个arx版本的arx项目

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 832

也谈ObjectARX多版本批量编译

也谈ObjectARX多版本批量编译 by edata 2017-12-10 因某些原因,我的电脑系统依旧是windows XP,所以能安装的vs最高版本是vs2010,以下均在vs2010上实现,其他更高vs一样可以实现,原理是一样的。 我的方式比较特殊,采用的是(hightflybird)的多版本解决方案,参见:http://bbs.mjtd.com/forum.php?m...

aeu9737的博客 807

AutoCAD二次开发三剑客:VLISP、VBA与ARX选型实战指南

AutoCAD二次开发是设计行业提升效率的关键技能。针对不同需求,开发者可以选择VLISP、VBA或ARX三类技术栈:VLISP轻量易用,适合快速编写批处理工具;VBA擅长与Excel等外部软件进行数据联动,打通表格与图纸的壁垒;ARX基于C++,性能最强,适合复杂重型插件与自定义实体开发。理解三种方案的工作原理与适用场景,有助于在批量图框生成、表格数据绘图、大规模实体遍历等实践中合理选型,同时规避环境配置、版本兼容和内存管理中的常见坑。本文从工程实践角度出发,系统梳理三者的开发环境搭建、典型代码示例与调试

weixin_34294649的博客 376

cad.arx 自定义实体之编译第一个项目(甜头)

本篇不从零开始讲如何制造自定义图元,而是教新手们如何设置了环境之后编译张帆书中的代码. 利用vs2010编译 张帆<AutoCAD ObjectARX(VC)开发基础与实例教程>一书中的自定义图元课程代码. 因为张帆都敲完了,我们肯定要先编译一下他的,再仔细地去看他的书,来学习c++, 看懂代码这种事情,就教给各位自己去学习.... 诉求点: 张帆书中所使用的vs200...

weixin_30438813的博客 518

化工CAD插件深度解析:LISP+ARX+数据库协同架构

AutoCAD插件是工程设计中提升效率的关键技术载体,其本质是通过脚本(LISP)、动态库(ARX)与外部数据源的协同,将行业规范转化为可执行逻辑。理解插件运行原理,需从AutoCAD二次开发基础出发:LISP负责规则翻译与交互控制,ARX承担高性能几何计算与API调用,而外部数据库则作为设计标准的‘活字典’,支撑材质、编码、图例等动态映射。这种三层架构显著降低人工校验错误率,广泛应用于化工PID校核、管道轴测图生成、设备布置智能标注等典型场景。本文聚焦HGCAD2.6.3插件体系,深入剖析LISP逻辑封装

weixin_34128839的博客 332

AutoCAD二次开发选型指南:VLISP/VBA/ARX实战避坑

AutoCAD二次开发涉及自动化脚本、GUI交互与高性能计算等核心需求,其技术选型本质是权衡开发效率、运行稳定性与系统兼容性。VLISP作为原生轻量级环境,直连数据库对象,适合图层管理、批量标注等高频批处理任务;VBA虽已退出新版支持,但在旧项目中仍承担Excel数据互通等不可替代角色;ARX则面向C++级性能要求,如几何运算、命令拦截等底层操作。本文聚焦工程落地场景,解析三者适用边界、跨版本兼容策略及静默失败排错方法,覆盖设计院、BIM咨询与设备厂商典型工作流。

weixin_29164497的博客 89

ARX项目模板一键创建多版本项目

本文介绍了AutoCAD ARX二次开发需适配多版本的原因及简化多版本开发的方法。文章指出不同AutoCAD版本的API接口、编译器要求和运行时环境存在差异,导致开发者必须为每个版本单独适配。作者提供了一种便捷的解决方案:通过创建VS项目模板,一键生成适配2016-2026多个AutoCAD版本的项目结构,并自动配置编译环境。该方法大幅简化了多版本开发流程,开发者只需下载对应SDK并修改属性文件路径即可快速开展项目。文末还提供了模板资源下载方式。(148字)

daotielong的博客 902

ObjectARX多版本CAD配置模板(ARX18-23).rar

是否还在苦苦寻找objectarx二次开发的版本问题解决方案? 这正是你所需要的,点进来吧^_^O(∩_∩)O哈哈~

arx升级

如果你打算升级你的ARX或者想在同一个IDE(譬如vs2010)编译多个版本的ARX,那么我希望这篇帖子对你有帮助首先你应该简单了解Objectarx开发的版本对应情况:R15--- 2000-2002--- objectarx 2000,2002--- vc6.0R16--- 2004-2006--- objectarx 2004-2006--- vc...

258

AutoCAD ObjectARX开发基础与实例教程

AutoCAD ObjectARX开发基础与实例教程,内容包含基础入门pdf教程,学习步骤计划、源代码、中文开发文档

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

ARX开发环境与ARX加载的秘密[转]

回想曾经开始学做ARX的日子,帮助文档不详尽,例子太少,苦不堪言啊。所以今天兴致好,发个贴子,让走过弯路的朋友们少走弯路,也算为这个注册N久的坛子尽点力。希望与大家多交流,共同提高。 回到正题,首先我们来了解一下ARX开发环境,大家普遍的情况应该是ACAD+SDK+VS。但这中间有一个版本问题,困扰大家,不同版本可能加载不上,不能用,有些朋友在升级ARX,移植到高版本上都有些头痛。下面来解释一

WM.steve's 随笔 4718

投第一篇SCIE英文期刊(详细步骤)

一个投稿SCIE英文期刊的过程

weixin_48849679的博客 1万+

arx移植 及预处理器

来源:http://bbs.mjtd.com/thread-102486-1-1.html 另,ObjectARX编程参考:http://bbs.mjtd.com/forum-14-1.html 如果你打算升级你的ARX或者想在同一个IDE(譬如vs2010)编译多个版本的ARX,那么我希望这篇帖子对你有帮助首先你应该简单了解Objectarx开发的版本对应情况:R15--...

207

【硬件开源实战】STM32G070RBT6开发板从设计到避坑全解析

本文全面解析了STM32G070RBT6开发板从硬件设计到避坑的实战经验。详细介绍了电源设计、时钟电路、PCB布局等关键环节,分享了成本控制、焊接测试、软件开发和外设驱动的实用技巧,帮助开发者高效完成项目开发。

weixin_26897585的博客 234

QGIS将经纬度坐标转成点

QGIS绘制一张地图

weixin_46713695的博客 6056

【转载】MFC与ARX结合开发完美的AutoCAD应用程序

摘要: 本文讨论了如何将MFC与ARX应用相结合进行AutoCAD的二次开发,并对何时选用动态链接方式,何时选用静态链接方式以及与ARX应用升级有关的问题作了详尽的论述。 关键词: MFC ARX 动态链接 静态链接 一.引言 AutoCAD是应用广泛的通用计算机辅助设计软件包。自AutoCAD 13版本开始,AutoDesk公司推出了一种新的面向对象的软件...

weixin_30765577的博客 852

【Tessy】集成测试小白入门指导

本文详细介绍了如何进行集成测试的小白入门指导,从新建工程到设计用例,实现集成测试的过程详细步骤

qq_37282365的博客 1184

api arx autocad_晓东CAD家园-论坛-ObjectARX-cad2006-2012自定义实体双击弹出编辑对话框-内容搜自论坛: API专门用来处理实体的双击事件,此API基于新的ARX...

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有帐号?立即注册x本帖最后由 panfanggui 于 2014-7-24 15:00 编辑内容搜自论坛:API专门用来处理实体的双击事件,此API基于新的ARX类AcDbDoubleClickEdit。在AutoCAD2000i中双击实体时,默认的行为是调用相应的实体定义编辑器或对象属性管理器。如果多个实体...

weixin_29194693的博客 694

使用CUDA进行按流排序的内存分配的示例程序

在GPU编程中,按流排序的内存分配是一种常见的优化技术,它可以提高内存访问的效率。通过将内存分配与特定的CUDA流相关联,可以确保在GPU上的并发操作期间,内存分配操作与其他GPU计算操作同时进行,从而减少了潜在的内存访问延迟。请注意,上述示例中的代码仅供参考,并可能需要根据实际需求进行修改和调整。此外,为了完整性,我们省略了一些细节,例如主机指针的分配和释放,以及错误处理和错误检查等。在该示例中,我们创建了4个CUDA流,并使用内存池进行内存分配。然后,我们在每个流上执行了相应的内存访问操作,并使用。

Byte_O_O的博客 281

ShowDoc item_id 未授权SQL注入漏洞复现

2024年6月,ShowDoc官方发布新版本修复了一个SQL注入漏洞。鉴于该漏洞无前置条件,易于利用,且默认情况下可暴破用户token获取系统后台权限,建议所有使用该系统的企业尽快升级修复,以确保系统安全。

0xSec 2357

[原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复

目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要。 批量编译的搭建网络上已经有了很多的教程,基本上都是基于vs2010+arx2012wizard,原因是arx2012的wizard有addin工具条,而高版本不再有此功能,对于新手来说,这是很不方便的。可是arx2012的wizard存在一...

aeu9737的博客 1068

yolov5运行detect.py之后卡住了?没后续,没结果,没报错,怎么办?如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1103

Object-ARX 2014与VS2010开发环境配置全指南

Object-ARX是AutoCAD官方C++级原生扩展接口,通过直接嵌入宿主进程实现高性能图形数据库操作与底层命令接管。其核心原理依赖严格的二进制接口(ABI)兼容性,而非语法或API层面的匹配。技术价值在于零延迟响应、实体级渲染控制及深度定制能力,广泛应用于机械制图、BIM协同、工程设计院等对稳定性与历史兼容性要求极高的工业场景。在AutoCAD 2014长期服役的存量系统中,VS2010不仅是编译工具,更是保障acdb19.lib符号解析、AcDbObjectId内存布局及msvcr100.dll运行

weixin_42529328的博客 256

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

工业控制系统辨识实战:ARX与ARMAX模型选型与调试

系统辨识是工业自动化中实现先进控制与故障诊断的基础技术,其核心在于利用输入输出数据构建动态数学模型。原理上,它通过差分方程逼近真实过程的响应特性,关键在于平衡实时性、鲁棒性与建模精度。ARX模型结构简洁、计算高效,广泛用于DCS和PLC嵌入式控制器;ARMAX进一步引入噪声通道建模,适用于传感器漂移、电网干扰等慢变扰动场景,显著提升预测稳定性。在化工、制药、电力等连续流程工业中,二者已成为预测控制、智能诊断与自适应调参的核心工具。本文聚焦现场可落地的选型逻辑、阶次判定、数据预处理及DCS投运要点,直击工程师

weixin_34121282的博客 376

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 3d max插件的基本知识和安装方法
下一篇: 3DMAX中CryEngine导出插件的配置方法
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值