最近一直在做升级,整理了一下心得,希望对大家有所帮助,另外如果哪位大虾还能补充,望赐教!
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的版本配对时所需做的改动。 |