请选择 进入手机版 | 继续访问电脑版
查看: 1246|回复: 1

ARX开发环境与ARX加载的秘密

[复制链接]
发表于 2013-5-22 19:14:30 | 显示全部楼层 |阅读模式
转自:http://blog.sina.com.cn/s/blog_41299a970100ndw1.html
今天在明经发了一贴,在博客中留下对应的印记。
   回想曾经开始学做ARX的日子,帮助文档不详尽,例子太少,苦不堪言啊。所以今天兴致好,发个贴子,让走过弯路的朋友们少走弯路,也算为这个注册N久的坛子尽点力。希望与大家多交流,共同提高。
   回到正题,首先我们来了解一下ARX开发环境,大家普遍的情况应该是ACAD+SDK+VS。但这中间有一个版本问题,困扰大家,不同版本可能加载不上,不能用,有些朋友在升级ARX,移植到高版本上都有些头痛。下面来解释一下这个问题
   第一要明确的是ACAD的版本从2006-2007中间有一个跳跃。2006之前是非Unicode版本的,包括它所有的API中,如加入Command传的字符串参数。而07开始都是Unicode版本的,所以如果有人试图跨这道界线去升级(没有代码的情况)的话,我的建议是放弃。而如果你有源代码,那恭喜你,你还有机会。
   其次,ACAD/ARX的SDK版本都说三年一版,那究竟什么是三年一个版本所指?简单来说就是CAD04,05,06是一代,CAD07,08,09是一代,CAD 10 11又是一代。同一代ACAD平台上的ARX可以相互通用,可以加载成功。这是为什么呢?根本原因在于,它们所依赖的运行时库不同。举例来说,CAD07,08,09依赖的是mfc80u.dll等这一套,CAD 2010和2011依赖的是mfc90u.dll这一套,它们的底子不一样,所以才会造成加载的问题。再回到和VS关系的问题上来说,我们知道说07 08 09要用VS2005, 10 11要用 VS 2008。如同上面所讲,根本原因就在于VS2005默认引用mfc80这套库,而VS2008默认引用mfc90这套库。那用VS2008能不能开发CAD 07 08 09呢?答案是可以的。但需要做一些设置,具体参见我在新浪的Blog。http://blog.sina.com.cn/s/blog_41299a970100mg04.html
   在明确了上面这些之后,要做的就是在开发之前,配置好相应的环境。一个最最重要的就是要保证,你的ACAD和你的SDK是配套的,(如果不配套?不是说完全不行,但是我劝你还是去下载个配套的,否则任何后果要自负)。至于VS?如果对于链接的工程设置熟悉的话,05还是08都是一样的。再低的版本?我已经不用了很久了,所以还是推荐VS05以上版本。
   接下来来说一下ARX的升级,最后我会谈ARX的加载。
   关于升级,包括2种情况,一种有源码,你是ARX的开发者。另一种是没有源码,你是它的使用者。关于第一种情况,配合新版本的编译环境,重新编译,如果版本跨过06-07这道界线的话,你需要修改所有的字符串为Unicode。(记得CAD07刚出来的时候,它对应的SDK的向导,应该有一个插件可以帮助你找到需要改动的字符串,当然还是要你自己来改)。至于第二种情况,就会相当烦锁了。首先,你需要没跨那道坎,否则希望基本是渺茫。第二你需要了解,DLL组织,ARX文件特点,运行时库版本控制与修改这些才有可能做到。在我Blog中有一些这方面内容的介绍。
   最后我们再说ARX的加载,它到底做了哪些操作呢?首先,要明确,ARX是DLL文件,只不过是一个特殊的DLL文件,它要求实现acrxGetAPIVersion和acrxEntryPoint这2个导出函数。acrxEntryPoint相信大家都已经实现过了,而acrxGetAPIVersion这个呢,似乎并没有做嘛,答案藏在你链接的Lib文件里。它的默认实现在rxapi.lib中,按推断这个rxapi.lib应该算做叫静态库?
   当ACAD加载一个ARX的时候,它会首先读入你的ARX文件,比较它的Link版本号,其实就是VS链接程序时写入的版本信息,如果你用的不同版本的VS去编译的ARX,那你就需要在这一步去改一下,根据DLL文件的组织,找到Link版本所对应的偏移,里面应该写着9或者8,9代码VS2008,8代码VS2005。类推,7代码撒就不说了吧。。。之后加载程序会去查找你的模块有没有实现上面说的那二个函数,之后调用LoadLibrary去加载DLL进内存,接着就去调用acrxGetApiVersion来检查你这个ARX版本是否匹配,如果你没用对SDK版本,可能就死在这步了。最后会调用EntryPoint。当然中间还有一些文件名,后缀之类的检查,这里就不再赘述了。

回复

使用道具 举报

发表于 2018-6-20 11:39:29 | 显示全部楼层
不知该说些什么。。。。。。就是谢谢











生肖   http://www.kenwoodhk.com.hk/sicijianshang/songcisanbaisho/   2018年06月20日 粵菜菜譜
中醫醫案    女士短髮 http://www.kenwoodhk.com.hk/fanwen/iy/  經典句子   中醫回醫    髮型大全   簡訊大全    歇後語    http://www.kenwoodhk.com.hk/kaoshizhanti/jisanjikaoshi/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 用百度帐号登录

本版积分规则

Archiver|手机版|小黑屋|BimCad Inc. ( 京ICP备15064117号

GMT+8, 2018-9-25 14:09 , Processed in 0.164861 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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