- UID
- 5043
- 积分
- 1347
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-13
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
最近一直在做升级,整理了一下心得,希望对大家有所帮助,另外如果哪位大虾还能补充,望赐教!
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::LineTyTraits<_LineTy>::LineTy' : 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>::LineTy LineTy;
可以编译:
typedef typename LineTyTraits<_LineTy>::LineTy LineTy;
最后其实升级从整体上来说就是两方面的升级:一是VC6.0编译器升级到VC8.0编译器,这部分是改C++语言;另外是ARX的升级,例如对UNICODE的全面支持;其次很少一部分就是VC与ARX的版本配对时所需做的改动。
|
评分
-
查看全部评分
|