设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 280|回复: 0

arx各个版本不同之处

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-22 10:18 | 显示全部楼层 |阅读模式
    如果你打算升级你的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包围起来,譬如以前写的:

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

    代码应当改写为:

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

    固然也可以写成

    普通浏览复制代码保存代码打印代码
    转: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下成立:

    普通浏览复制代码保存代码打印代码
    转:ARX程序的升级及多版本编译须知for (int i = 0;i< n;i++)
    转:ARX程序的升级及多版本编译须知{...}
    转:ARX程序的升级及多版本编译须知return i;


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

    因而有两种办法:
    第一种:修改代码,把 i定义到循环外面:

    普通浏览复制代码保存代码打印代码
    转:ARX程序的升级及多版本编译须知int i;
    转:ARX程序的升级及多版本编译须知for (i=0;i;i++)
    转: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. 版本定义问题

    在一些程序中,必须将

    普通浏览复制代码保存代码打印代码
    转:ARX程序的升级及多版本编译须知#ifndef WINVER                                         
    转:ARX程序的升级及多版本编译须知#define WINVER 0x0400                        
    转:ARX程序的升级及多版本编译须知#endif
    转:ARX程序的升级及多版本编译须知

    修改为

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

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

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

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

    可以这样做:
    在project->BaseClasses properties->configuration->C/C++ ->reprocessor (预处理指令)
    中添加 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'

    你应当加如下判断:


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


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

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


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛