arx升级
如果你打算升级你的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包围起来,譬如以前写的:
- acutPrintf ("hello");
代码应当改写为:
- acutPrintf (_T("hello"));
固然也可以写成
- 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下成立:
- for (int i = 0;i< n;i++)
- {...}
- return i;
但是对于其上版本,不成立,会出现编译错误:
error C2065: 'i' : undeclared identifier
for循环内定义的i一旦放在外面,则视作未定义符号。它的作用域仅仅在于循环内。
因而有两种办法:
第一种:修改代码,把 i定义到循环外面:
- int i;
- for (i=0;i;i++)
- ...
...
第二种:修改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. 版本定义问题
在一些程序中,必须将
- #ifndef WINVER
- #define WINVER 0x0400
- #endif
修改为
- #ifndef WINVER
- #define WINVER 0x0501
- #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'
你应当加如下判断:
- //ADS按照上面设置
- #if(ADS>17)
- virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *mode) ;
- virtual void subViewportDraw(AcGiViewportDraw * mode);
- #else
- virtual Adesk::Boolean worldDraw(AcGiWorldDraw *mode) ;
- virtual void viewportDraw(AcGiViewportDraw * mode);
- #endif
R18及其以上版本用subWorldDraw代替了worldDraw,等等。
8.预编译头问题。
在一些旧的版本,CPP文件可能都按照默认设置为 Not using precompiled headers (不使用预编译头)
应当改成 Use(/YU),stdafx.cpp改成 Create(/YC)
这样一来可以极大地提高编译速度,二来减少一些升级时带来的问题。
待续。。。
arx升级的更多相关文章
- 用vs2010编译和调试多个arx版本的arx项目
翻译自dev guide<Compile and Debug Mixed-mode projects> 默认vs2010是使用ARX2014,开发AutoCAD2014使用的ARX, ...
- arx移植 及预处理器
来源:http://bbs.mjtd.com/thread-102486-1-1.html 另,ObjectARX编程参考:http://bbs.mjtd.com/forum-14-1.html 如果 ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- ASP.NET 5 RC1 升级 ASP.NET Core 1.0 RC2 记录
升级文档: Migrating from DNX to .NET Core Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2 Migrating ...
- SQL Server2016升级前几点自检
SQL Server2016已经出来一段时间了,而且最新的SP1包也于2016年11月18日正式发布,各种新的特性推出让我们跃跃欲试.那么对于我们真实的业务环境,特别是生产环境要不要"跟风& ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...
随机推荐
- Android Jni层 创建 linux socket 出错问题解决
问题: 想在Jni层创建 udp socket 与服务端通信,可是没有成功.最后发现居然是创建socket失败(代码例如以下) // create socket g_sd = socket(AF_IN ...
- 2015ACM/ICPC Asia Regional Changchun Online /HDU 5438 图
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 1310 ...
- 【bzoj4592】[Shoi2015]脑洞治疗仪
由于脑洞的序列不会改变,考虑用线段树维护区间内sum,左边0的个数,右边0的个数,区间内最大脑洞.对于查询l~r最大脑洞可以将l~r分成logn个区间,总复杂度O(nlogn). #include&l ...
- POJ2187 Beauty Contest (旋转卡壳算法 求直径)
POJ2187 旋转卡壳算法如图 证明:对于直径AB 必然有某一时刻 A和B同时被卡住 所以旋转卡壳卡住的点集中必然存在直径 而卡壳过程显然是O(n)的 故可在O(n)时间内求出直径 凸包具有良好的性 ...
- vue 基础知识 随笔
window.localStorage.gettItem("someItem"||[])//如果localStorage中的someItem不存在就返回一个空数组 window.l ...
- GitHub中有关已建仓库及上传项目文件的删除
上传了项目,竟然发现找不到删除的地方,真是囧... 1. 已建仓库的删除 点击 settings,进入以下界面,点击箭头指向的按钮 进入以下界面 2. 某个文件的删除 直接点开文件,在右上角有个删除工 ...
- P2746 [USACO5.3]校园网Network of Schools(Tarjan)
P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 ...
- React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design—Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- ASP.NET SQL 总结
1.SQLSERVER服务器中,给定表 table1 中有两个字段 ID.LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句 ...
- linux编译安装gcc5.3.0
1.下载GCC5.3.0安装包 #su #cd /opt #wget http://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz 2.解压 #.tar. ...