ObjectARX 2006 + VC2002 无法在AutoCAD 2008上运行

dfpgb 2010-01-21 11:18:26
程序本来是ObjectARX 2006 + VC2002写的,在AutoCAD2006上可以运行.
尝试在AutoCAD2004上运行,成功.
尝试在AutoCAD2008上运行,无法加载.
于是把头文件和库都改为ObjectARX 2008的,但是开发环境仍然是VC2002,编译时报错如下:

AdAChar.h(36) : fatal error C1189: #error : Please use native wchar_t type (/Zc:wchar_t)

在项目属性中的"C++"中的"语言"中打开"/Zc:wchar_t",然后继续编译,报错如下(包括后面还有一种):

arxEntryPoint.h(140) : error C2664: “LoadStringA” : 不能将参数 3 从“ACHAR [133]”转换为“LPSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

网上有人说需要把字符串全部用TEXT宏包含,但是我发现如果我用ObjectARX 2008 加 VC2008写一个程序,自己的的类(其实就是自己的2006中的类)中的字符串并不必须用TEXT宏包含一样可以建立运行,而且目前程序中用到了VC6中的一些类全用TEXT宏改也不太现实,关键是我感觉不全是这个原因.因为有的错误是必须用TEXT宏来解决的,如下面的错误:

error C2664: “acutPrintf” : 不能将参数 1 从“char [80]”转换为“const ACHAR *”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

有兄弟姐妹知道怎么解决这个问题吗?

另外我还有个疑问,在ObjectARX 2008\docs\arxdoc.chm文档中有如下一段,不是说ObjectARX 2006的程序可以在AutoCAD 2008上运行吗?还是不是这么个意思?

API Compatibility
Binary compatibility between AutoCAD 2007 and AutoCAD 2008 has been maintained. Applications built with ObjectARX for AutoCAD 2007 and ObjectARX for AutoCAD 2006 will continue to run in AutoCAD 2008, but applications built using ObjectARX for AutoCAD 2008 may not work with previous releases.
...全文
776 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfpgb 2010-01-29
  • 打赏
  • 举报
回复
汗 昨天忘了..
dfpgb 2010-01-27
  • 打赏
  • 举报
回复
唉。。。看来是没有什么好的办法了。。。

多谢各位

明天结贴
dfpgb 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sjdev 的回复:]
引用 7 楼 dfpgb 的回复:
还有arx的15,16,17,18分别是arx的200X?

r15 2002
r16 2004-2006
r17 2007-2009
r18 2010
[/Quote]
多谢

看看还有没有人知道怎么用VC2002建立r17的程序呢?
sjdev 2010-01-25
  • 打赏
  • 举报
回复
做手机挺好.真的。
shuhuanxiao 2010-01-25
  • 打赏
  • 举报
回复
升级的问题
2年前我也遇到过
和LZ一样尝试了不同的方法,都是没用
最后还是用了vs2005
呵呵
别浪费时间了,换编译器吧

ps:办法应该也是有的。。但我当时真没试验出来,唉Arx想起来了以前的自己,现在在做手机了,怀念那时的日子
dfpgb 2010-01-22
  • 打赏
  • 举报
回复
我把VC2002的“工具” ->“选项”对话框 ->“项目”->“VC++ 目录”里面全部到照搬VC2005里面的设置,结果出了几百个错误...

还有什么地方可以改呢?
dfpgb 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sjdev 的回复:]
链接错误是什么?需要在选项中加入相应的lib文件吧。


另外:
据我所知,vc6,7,8,9分别对应arx的15,16,17,18.
你编译错误应该是版本对应的不正确。


[/Quote]
链接错误如你说料是找不到MFC8的lib,我把MFC8的lib的路径"C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib"加到附加库目录中就可以了,但是还有许多个链接警告,如下:

acedapi.lib(acedcls.obj) : warning LNK4229: 遇到无效的指令“/manifestdependency:type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'”;已将其忽略

而且程序建立成功后仍然无法在AutoCAD 2008中加载,我感觉是不是VC2002中默认使用了MFC7的其它的东西我没有改过来呢?

还有arx的15,16,17,18分别是arx的200X?
sjdev 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dfpgb 的回复:]
还有arx的15,16,17,18分别是arx的200X?
[/Quote]
r15 2002
r16 2004-2006
r17 2007-2009
r18 2010
dfpgb 2010-01-22
  • 打赏
  • 举报
回复
引用
要仔细一点,“工具” ->“选项”对话框 ->“项目”里的东西好多都是相对路径,照搬过去可能就有好多东西找 ...
2005anjob 发表于 2010-1-22 02:35 PM

嗯,我注意到是相对路径了,我都改成VC8的绝对路径了,是不行的啊....


我现在都要绝望了....没办法我退了一步,我把VC2000的工程首先改成了TEXT宏的"兼容"写法,然后用VC2005打开,然后转换,然后该工程的字符集为Unicode,然后把 C++的附加包含目录/using应用目录 以及链接的附加目录都改成对应的ObjectARX 2008的路径,然后编译,链接,加载,运行,OK,成功了...

你说的没错啊在VC2005里面做当然是最好了啊,可是客户也有在使用低版本的CAD啊,这样如果我同时用VC2002/2005就需要维护两套代码了啊...麻烦而且容易关键容易出错.所以我觉得最好的解决方案就是同一个工具只是包含的头文件啊库啊什么的不同就可以了.

现在看起来暂时不是很好的解决了...看看有更好的解决方法吗?
marrco2005 2010-01-21
  • 打赏
  • 举报
回复
我觉得既然已经用 vs2003 了, 那为什么不升级到 2005 或者2008 呢?
2003只是一个过渡产品

用2005 或者 2008 编译试试
xwsn007 2010-01-21
  • 打赏
  • 举报
回复
MARK & UP
jyh_baoding 2010-01-21
  • 打赏
  • 举报
回复
帮顶
sjdev 2010-01-21
  • 打赏
  • 举报
回复
链接错误是什么?需要在选项中加入相应的lib文件吧。


另外:
据我所知,vc6,7,8,9分别对应arx的15,16,17,18.
你编译错误应该是版本对应的不正确。

dfpgb 2010-01-21
  • 打赏
  • 举报
回复
http://www.objectarx.net/bbs/viewthread.php?tid=4388&fromuid=87983
引用
我个人的一点观点,主要是因为AutoCAD 2004 和AutoCAD 2006 本身就是用vs2002编的,而AutoCAD 2008则是用 vs2005编的,所以AutoCAD 2004 和 AutoCAD 2006 的MFC库是一个版本,和AutoCAD 2008 用的MFC库不一样,当然你用 vs2002编译的arx就不可以在AutoCAD 2008下运行了。
其实你完全可以在cad的安装目录下找到他们所用的MFCxxx.DLL,vs 2002 的MFC是7.0,vs2005好像是8.0,可以仔细想一下,在发布ARX的时候我们不需要发布用到的MFC类库,为什么呢?主要是因为在AutoCAD下已经有他们了,可以找到他们。
[size=2]2005anjob 发表于 2010-1-21 03:27 PM [/size]

引用
主要原因是因为Arx2008使用了Unicode字符集的原因,需要将原来所有的字符处理相关的变量,常量,方法统统改到Unicode模式
方法很简单,首先将工程属性设为使用Unicode,然后包含头文件tchar.h,然后按照tchar.h中的宏定义,将涉及到的内容统统替换
比如
char 替换为 TCHAR
"Hello world" 替换为 _T("Hello World")
sprintf() 替换为 _tsprintf()
等等
[size=2]cloudlove 发表于 2010-1-21 05:12 PM [/size]


非常感谢二位!
2005anjob你说的对哈突然才恍过神来...
cloudlove按照你说的方法做了,能编译通过了~~~!你太帅了~~~呵呵
可是链接无法通过,应该正如2005anjob所说的原因...
那现在的问题就是如何在vc2002的环境中链接vc2005的mfc8的lib等等呢?
dfpgb 2010-01-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 marrco2005 的回复:]
我觉得既然已经用 vs2003 了, 那为什么不升级到 2005 或者2008 呢?
2003只是一个过渡产品

用2005 或者 2008 编译试试
[/Quote]
是不是有字打错了啊...

是这样的...我必须按照客户的习惯来创建用于不同版本的CAD的程序来...但是我又不想维护两套项目文件...

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧