找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2106|回复: 6

[分享] ARX开发环境与ARX加载的秘密

[复制链接]

已领礼包: 13个

财富等级: 恭喜发财

发表于 2016-8-23 17:38:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回想曾经开始学做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。当然中间还有一些文件名,后缀之类的检查,这里就不再赘述了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-2-13 13:11:51 | 显示全部楼层
确实是难得好帖啊,顶先
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2017-3-20 20:04:11 | 显示全部楼层
好贴,已收藏
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-7-21 10:40:51 | 显示全部楼层
谢谢楼主讲解!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2017-7-27 14:30:18 | 显示全部楼层
好贴啊,尤其是博文很值得学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-9-15 14:22:34 | 显示全部楼层
学习了,谢谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2019-1-23 13:01:06 | 显示全部楼层
AutoCAD2016要用什么版的VS和SDK呀?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 05:06 , Processed in 0.203927 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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