neumoor 发表于 2006-9-26 22:24:00

arx2002升级到arx2007实战小结!

<P>最近一直在做升级,整理了一下心得,希望对大家有所帮助,另外如果哪位大虾还能补充,望赐教!</P>
<P>arx2002升级到 arx2007 步骤:<BR>1:将arx2002整个工程目录拷贝到新的目录。用.net2005将原来的工程打开;打开时按提示将vc6的工程</P>
<P>自动转化为2005的工程。<BR>2:配置工程设置:在解决方案右键单击下属的工程树,选择菜单中的“属性”,弹出×××属性页对话</P>
<P>框。<BR>&nbsp;&nbsp; a、在配置下拉框中选择“所有配置”;<BR>&nbsp;&nbsp; b、找到左端树结构中“配置属性-&gt;C/C++-&gt;常规”,在其右端“附加包含目录”项中填入Object </P>
<P>ARX2007下的inc文件夹路径和自己的附加文件夹的路径;警告等级选择1级(/w1)<BR>&nbsp;&nbsp; c、找到左端树结构中“配置属性-&gt;链接器-&gt;常规”,在其右端“附加库目录”项中填入</P>
<P>ObjectARX2007下的lib文件夹路径;<BR>&nbsp;&nbsp; d、找到左端树结构中“配置属性-&gt;链接器-&gt;输入”,在其右端“附加依赖项”项中填入</P>
<P>“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”;<BR>&nbsp;&nbsp; e、应用设置改动,确定退出配置属性。<BR>3:修改代码:<BR>&nbsp;&nbsp; a、将所有arx函数中的设计调用char型参数的变量全部转化为ACHAR型;具体看情况:如果是常量型字符串作为参数,例如"提示"--》L"提示",(在前面加上L即可);如果是char型变量,则直接用强类型转换,例如char aa; ……; acedalert(aa); --&gt; char aa;……;acedalert((ACHAR*)aa);;反之ACHAR型转化到char型时也可直接用强类型转化;<BR>&nbsp;&nbsp; b、acui类不能在.net2005下使用,所以所有用CAcUiDialog类做的对话框,全部改为基于CDialog类做;直接可以用CDialog替换所有的CAcUiDialog,并将CAcUiDialog的成员函数用相应的windows函数代替:<BR>&nbsp;&nbsp; c、由于vc6.0的变量作用域与.net2005作用域定义有差别,所以做好将for(int i = 0; ……)改为int i = 0; for(;……)的形式;<BR>&nbsp;&nbsp; d、将void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,&nbsp;&nbsp;&nbsp;&nbsp;const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal)改写为void AddCommand(const ACHAR* cmdGroup, const ACHAR* cmdInt, const ACHAR* cmdLoc,&nbsp;&nbsp;&nbsp;&nbsp;const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal);并将其对应的声明处一一更正过来。<BR>&nbsp;&nbsp; e、将strcpy改写为strcpy_s<BR>&nbsp;&nbsp; f、有的关于模版编程的某些代码,编译时出现类似如下错误:<BR>D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : warning C4346: 'crt::LineTyTraits&lt;_LineTy&gt;::LineTy' : dependent name is not a type<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix with 'typename' to indicate a type<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D:\vc8project\ms_inc\calculate/RMPolicy.hpp(52) : see reference to class template </P>
<P>instantiation 'crt::RMBase&lt;_LineTy&gt;' being compiled<BR>D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : error C2146: syntax error : missing ';' </P>
<P>before identifier 'LineTy'<BR>D:\vc8project\ms_inc\calculate/RMPolicy.hpp(50) : error C4430: missing type specifier - int </P>
<P>assumed. Note: C++ does not support default-int<BR>D:\vc8project\ms_inc\calculate/RMPolicy.hpp(58) : error C2061: syntax error : identifier </P>
<P>'LineTy'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D:\vc8project\ms_inc\calculate/RMPolicy.hpp(59) : see reference to class template </P>
<P>instantiation 'crt::ReadPolicy&lt;_LineTy&gt;' being compiled<BR>&nbsp;&nbsp;&nbsp;&nbsp; 应该在那个语句声明中加入typename即可编译过去;<BR>例如:<BR>不能编译:<BR>&nbsp;&nbsp;&nbsp; typedef&nbsp; LineTyTraits&lt;_LineTy&gt;::LineTy&nbsp; LineTy;<BR>可以编译:<BR>&nbsp;&nbsp;&nbsp; typedef typename LineTyTraits&lt;_LineTy&gt;::LineTy&nbsp; LineTy;</P>
<P>最后其实升级从整体上来说就是两方面的升级:一是VC6.0编译器升级到VC8.0编译器,这部分是改C++语言;另外是ARX的升级,例如对UNICODE的全面支持;其次很少一部分就是VC与ARX的版本配对时所需做的改动。</P>

neumoor 发表于 2006-10-7 11:09:00

<P>经过进一步实战验证,虽然按上面步骤能编译过去,但是还是有些问题。</P>
<P>这个问题就是(ACHAR*)的强制转化,直接用强制转化会有bug出现的,大概规律是这样,字符串长度为奇数时ok,如果为偶数,转化后的字符串前面也为正确的字符串,但是后面将带一大堆乱码。原因分析为,就是wchar_t型是占两字节的类型,如果字符串为偶数则字符串结束符将被占用。</P>
<P>修改办法:</P>
<P>1、利用char和wchar_t型的类型转化函数进行转化。</P>
<P>2、手工截断字符串。(没有试过^_^)</P>

civil_9527 发表于 2006-10-26 19:03:00

<P>比较实用,正在用VS2005+ARX2007,谁用程序向导生成的例程,让大家学习一下,</P>
<P>我看了ARX带的例子,和以前的版本基本没什么区别,都不是用向导生成的。</P>
<P>比如其中的,DocData.cpp及.h是作什么用的。最好有一个例子学一学。</P>

yang_l_y 发表于 2006-11-30 11:50:00

请问有ARX2000升级到ARX2004的经验么?能讲下吗?

^_^ 发表于 2006-12-4 08:37:00

<P>谢谢!</P>
<P>很有帮助!</P>

lili0812 发表于 2006-12-6 15:54:00

有ADSRX移植到ObjectARX的么?

easypower 发表于 2008-9-25 11:33:00

[转]AutoPDMS8.0源码使用高版本ObjectARX(2004/2007)编译的总结

sanqima88 发表于 2014-12-3 11:26:30

不错,值得一看。

Milita29 发表于 2016-7-6 20:11:50

感谢楼主的分享!
页: [1]
查看完整版本: arx2002升级到arx2007实战小结!