明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7443|回复: 8

arx2002升级到arx2007实战小结!

[复制链接]
发表于 2006-9-26 22:24:00 | 显示全部楼层 |阅读模式

最近一直在做升级,整理了一下心得,希望对大家有所帮助,另外如果哪位大虾还能补充,望赐教!

arx2002升级到 arx2007 步骤:
1:将arx2002整个工程目录拷贝到新的目录。用.net2005将原来的工程打开;打开时按提示将vc6的工程

自动转化为2005的工程。
2:配置工程设置:在解决方案右键单击下属的工程树,选择菜单中的“属性”,弹出×××属性页对话

框。
   a、在配置下拉框中选择“所有配置”;
   b、找到左端树结构中“配置属性->C/C++->常规”,在其右端“附加包含目录”项中填入Object

ARX2007下的inc文件夹路径和自己的附加文件夹的路径;警告等级选择1级(/w1)
   c、找到左端树结构中“配置属性->链接器->常规”,在其右端“附加库目录”项中填入

ObjectARX2007下的lib文件夹路径;
   d、找到左端树结构中“配置属性->链接器->输入”,在其右端“附加依赖项”项中填入

“acad.lib AcCamera.lib acdb17.lib AcDblClkEditPE.lib acdbmgd.lib AcDbMPolygon17.lib acedapi.lib AcFdEval.lib AcFdUi.lib acge17.lib acgiapi.lib achapi17.lib acismobj17.lib AcSceneOE.lib AcTc.lib AcTcUi.lib acui17.lib adui17.lib aNav.lib aseapi17.lib asiapi17.lib axdb.lib oleaprot.lib rxapi.lib”;
   e、应用设置改动,确定退出配置属性。
3:修改代码:
   a、将所有arx函数中的设计调用char型参数的变量全部转化为ACHAR型;具体看情况:如果是常量型字符串作为参数,例如"提示"--》L"提示",(在前面加上L即可);如果是char型变量,则直接用强类型转换,例如char aa[10]; ……; acedalert(aa); --> char aa[10];……;acedalert((ACHAR*)aa);;反之ACHAR型转化到char型时也可直接用强类型转化;
   b、acui类不能在.net2005下使用,所以所有用CAcUiDialog类做的对话框,全部改为基于CDialog类做;直接可以用CDialog替换所有的CAcUiDialog,并将CAcUiDialog的成员函数用相应的windows函数代替:
   c、由于vc6.0的变量作用域与.net2005作用域定义有差别,所以做好将for(int i = 0; ……)改为int i = 0; for(;……)的形式;
   d、将void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,    const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal)改写为void AddCommand(const ACHAR* cmdGroup, const ACHAR* cmdInt, const ACHAR* cmdLoc,    const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal);并将其对应的声明处一一更正过来。
   e、将strcpy改写为strcpy_s
   f、有的关于模版编程的某些代码,编译时出现类似如下错误:
D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : warning C4346: 'crt:ineTyTraits<_LineTy>:ineTy' : dependent name is not a type
        prefix with 'typename' to indicate a type
        D:\vc8project\ms_inc\calculate/RMPolicy.hpp(52) : see reference to class template

instantiation 'crt::RMBase<_LineTy>' being compiled
D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : error C2146: syntax error : missing ';'

before identifier 'LineTy'
D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : error C4430: missing type specifier - int

assumed. Note: C++ does not support default-int
D:\vc8project\ms_inc\calculate/RMPolicy.hpp(58) : error C2061: syntax error : identifier

'LineTy'
        D:\vc8project\ms_inc\calculate/RMPolicy.hpp(59) : see reference to class template

instantiation 'crt::ReadPolicy<_LineTy>' being compiled
     应该在那个语句声明中加入typename即可编译过去;
例如:
不能编译:
    typedef  LineTyTraits<_LineTy>:ineTy  LineTy;
可以编译:
    typedef typename LineTyTraits<_LineTy>:ineTy  LineTy;

最后其实升级从整体上来说就是两方面的升级:一是VC6.0编译器升级到VC8.0编译器,这部分是改C++语言;另外是ARX的升级,例如对UNICODE的全面支持;其次很少一部分就是VC与ARX的版本配对时所需做的改动。

评分

参与人数 1金钱 +10 贡献 +5 激情 +5 收起 理由
easypower + 10 + 5 + 5 【精华】好文章好文章

查看全部评分

 楼主| 发表于 2006-10-7 11:09:00 | 显示全部楼层

经过进一步实战验证,虽然按上面步骤能编译过去,但是还是有些问题。

这个问题就是(ACHAR*)的强制转化,直接用强制转化会有bug出现的,大概规律是这样,字符串长度为奇数时ok,如果为偶数,转化后的字符串前面也为正确的字符串,但是后面将带一大堆乱码。原因分析为,就是wchar_t型是占两字节的类型,如果字符串为偶数则字符串结束符将被占用。

修改办法:

1、利用char和wchar_t型的类型转化函数进行转化。

2、手工截断字符串。(没有试过^_^)

发表于 2006-10-26 19:03:00 | 显示全部楼层

比较实用,正在用VS2005+ARX2007,谁用程序向导生成的例程,让大家学习一下,

我看了ARX带的例子,和以前的版本基本没什么区别,都不是用向导生成的。

比如其中的,DocData.cpp及.h是作什么用的。最好有一个例子学一学。

发表于 2006-11-30 11:50:00 | 显示全部楼层
请问有ARX2000升级到ARX2004的经验么?能讲下吗?
发表于 2006-12-4 08:37:00 | 显示全部楼层

谢谢!

很有帮助!

发表于 2006-12-6 15:54:00 | 显示全部楼层
有ADSRX移植到ObjectARX的么?
发表于 2008-9-25 11:33:00 | 显示全部楼层
[转]AutoPDMS8.0源码使用高版本ObjectARX(2004/2007)编译的总结
发表于 2014-12-3 11:26:30 | 显示全部楼层
不错,值得一看。
发表于 2016-7-6 20:11:50 | 显示全部楼层
感谢楼主的分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 23:19 , Processed in 0.172809 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表