找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 880|回复: 10

[求助] 类封装 dll

[复制链接]
发表于 2018-10-31 15:31:27 | 显示全部楼层 |阅读模式

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

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

×
1、环境:vs2008 CAD2010 64位
2、利用向导创建项目A,定义类、函数,然后在该项目中调用这个函数,生成arx,加载到CAD,执行命令没有问题。
3、将项目A项目中 链接器→常规→输出文件后缀由.arx改为.dll,并重新编译A;利用向导创建项目B,在项目B中包含A生成的.lib,.h文件,附加依赖项中添加.lib文件名,并将A生成的dll放在B的debug目录下(include路径中也有)
4、编译项目B,会提示error LNK2019错误不知道为何,请前辈指点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-10-31 15:50:40 | 显示全部楼层
你用编译ARX的设置,改成DLL,本质还是ARX,不同的ARX间调用,用 acedInvoke
如果定义普通的动态库,入口函数就不是acrxEntryPoint了,你要改。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-9 22:47:10 | 显示全部楼层
marting 发表于 2018-10-31 15:50
你用编译ARX的设置,改成DLL,本质还是ARX,不同的ARX间调用,用 acedInvoke
如果定义普通的动态库,入口 ...

您说的有道理,我之前一直用ads函数比较多,而且除此之外的函数基本都是引用的别人封装好的,所以想自己实现,自己扩充,也有学习的动力。按照您的指点我在研究研究
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-23 16:04:43 | 显示全部楼层
我说说个人的理解和建议,仅供参考。
实际上楼主可能还没分清楚arx的dll和普通dll的区别,甚至是(动态库,静态库)。
我姑且先猜测楼主只是想代码复用,实际上这种是用静态库比较合适,静态库的结果就如同arxsdk自身一样,将已有的成熟的类封装成静态库,编译好对应版本,在应用代码中可以如同arx sdk一样的用法,指定头文件和库文件即可。
这样封装好的就不用每次编译,提高了编译速度。
静态库的封装需要用到手工设置配置参数,要求和arx配置相同。

点评

其实使用DLL做库函数也一样,只要有DLL和导入库LIB和H文件即可了。 DLL的好处是动态链接,这样ARX本身很小,静态库编译链接后代码要加入的编译的ARX里面。 使用DLL还一个好处就是只要两个版本X86和X64就行了,不  详情 回复 发表于 2018-11-23 16:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-11-23 16:18:55 | 显示全部楼层
本帖最后由 Lispboy 于 2018-11-23 16:20 编辑
edata 发表于 2018-11-23 16:04
我说说个人的理解和建议,仅供参考。
实际上楼主可能还没分清楚arx的dll和普通dll的区别,甚至是(动态库 ...

其实使用DLL做库函数也一样,只要有DLL和导入库LIB和H文件即可了。
DLL的好处是动态链接,这样ARX本身很小,静态库编译链接后代码要加入的编译的ARX里面。

使用DLL还一个好处就是只要两个版本X86和X64就行了,不依赖于ARX的版本,所有的ACAD版本的ARX都可以用。当然这个前提是建普通的库,不要用ARX SDK的函数。否则还是每个ARX版本都要有对应的DLL的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

发表于 2018-11-23 18:04:25 | 显示全部楼层
是可以用一个arx去调用另一个arx的。下面是一个例子,
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:MyDLLLibTest.rar 
下载次数:20  文件大小:62.61 KB 
下载权限: 不限 以上  [免费赚D豆]


用arx调用另一个作为库函数的arx。
参考:
https://blog.csdn.net/fengbingchun/article/details/78825004
https://www.cnblogs.com/nzbbody/p/3448385.html


点评

高版用的这种方式确实很好,和arx调用dbx很像,依赖另外一个库,这种方式应该可以“隐形”的“显示”调用,比纯dll的静态调用方式好,应该可以在加载testarx之前,先自己加载lib的arx。  详情 回复 发表于 2018-11-23 21:01

评分

参与人数 2D豆 +15 收起 理由
edata + 10 很给力!经验;技术要点;资料分享奖!
marting + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

发表于 2018-11-23 19:56:20 来自手机 | 显示全部楼层
Lispboy 发表于 2018-11-23 16:18
其实使用DLL做库函数也一样,只要有DLL和导入库LIB和H文件即可了。
DLL的好处是动态链接,这样ARX本身很 ...

在arx开发中,相对来说,用纯dll的几率比较小吧,并且用dll按你说的有lib库算是静态加载,我记得这个dll路径应该有限制范围,而且要搞标准dll,我记得普通dll也有版本问题吧。

来自: 微社区

点评

DLL路径是有限制,一般拷贝到系统目录就行了 DLL我强调的是可以让ARX大小变小,相对于静态LIB 可以用loadModule动态加载 比如一些EXCEL DLL库,PDF DLL库,一般就是X64或者X86,可以让2004-2019的ARX都可以用。  详情 回复 发表于 2018-11-23 20:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-11-23 20:05:00 | 显示全部楼层
edata 发表于 2018-11-23 19:56
在arx开发中,相对来说,用纯dll的几率比较小吧,并且用dll按你说的有lib库算是静态加载,我记得这个dll ...

DLL路径是有限制,一般拷贝到系统目录就行了
DLL我强调的是可以让ARX大小变小,相对于静态LIB
可以用loadModule动态加载
比如一些EXCEL DLL库,PDF DLL库,一般就是X64或者X86,可以让2004-2019的ARX都可以用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-11-23 21:01:24 | 显示全部楼层
Highflybird 发表于 2018-11-23 18:04
是可以用一个arx去调用另一个arx的。下面是一个例子,
用arx调用另一个作为库函数的arx。
参考:

高版用的这种方式确实很好,和arx调用dbx很像,依赖另外一个库,这种方式应该可以“隐形”的“显示”调用,比纯dll的静态调用方式好,应该可以在加载testarx之前,先自己加载lib的arx。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-11-26 18:58:23 | 显示全部楼层
扩展名是dll 或 arx,没关系的。 1,请看看 lib 是不是已经成功导入。 2,用depend看看 函数是否成功导出
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2018-11-26 20:58:56 | 显示全部楼层
使用extern "C" __declspec(dllexport)  导出函数,其它 ARX 导入使用即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:19 , Processed in 0.357786 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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