开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4166|回复: 3
收起左侧

[技术专题] 【超简单静态支持库开发】二、原理阐述以及问题解决 (重发)

[复制链接]
结帖率:100% (26/26)
发表于 2019-3-29 13:03:22 | 显示全部楼层 |阅读模式   安徽省池州市
本帖最后由 镇坛道德标杆 于 2019-3-29 13:04 编辑

【加入支持库开发QQ群:547525064】


二、原理阐述以及问题解决

探索一下支持库开发的简化, 需 配合 eDiff 中的 eLibEx.h 阅读.   

__E_STATIC_LIB

__E_STATIC_LIB 是 elib SDK 中的静态库定义的宏, 被 #ifndef __E_STATIC_LIB#endif 包起来的代码在编译 .fne 的时候不会被编译.  

ELIB_DIRTY

ELIB_DIRTY 是利用脏兮兮的宏将很多代码封装在 eLibEx.h 中, 实际上代码还是在 main.cpp 里, 只是不会那么碍眼.  

如果你去仔细查看 ELIB_DIRTY 会发现里面实际上有很多东西, 包括静态变量、函数等等.

ADD_CMD

ADD_CMDADD_CMD_EXADD_CMD_N0ARGSADD_CMD_N0ARGS_EX 这四个宏是添加支持库导出命令用的, 带 EX 的参数比较详细, 不带的则比较简化, 有默认设置.

ADD_CONST

ADD_CONSTADD_CONST_EX 是添加支持库常量用的, 同上.  

ADD_LIB_INFO

ADD_LIB_INFO 其实是 GetNewInf 这个 fne 导出函数, 本来可以设计成传参数的, 想了想没设置, 你可以按照自己喜欢的来修改.

ADD_TYPE

ADD_TYPEADD_TYPE_EX 是添加支持库数据类型用的, 其余同上, 但是要注意, 它是"无限参数"(可变参数), 可是 __VA_ARGS__ 并不被 vc6 所支持, 我用了一种思路避过了这个限制:

我们知道, .fne 实际上是一个动态链接库(DLL), e.exe 通过 GetNewInf 获取到支持库的各种信息, 包括函数指针, 而在 F5 调试时, 实际上调用的是 fne, 静态编译的时候 e.exe 才会根据 NL_GET_CMD_FUNC_NAMES 这个消息返回的函数名称数组去链接 _static.lib .  

所以例如我想实现用易语言 vc6 的 linker 可以静态编译的支持库, 我只需要保证 _static.lib 就可以了, 而 .fne 完全可以用高版本的 sdk 来编译, 而恰好这些宏都被 #ifndef __E_STATIC_LIB 所包裹, 在生成 _static.lib 的时候根本不会被编译, 于是问题解决!  


评分

参与人数 1好评 +1 精币 +5 收起 理由
冰点 + 1 + 5 感谢发布原创作品,精易因你更精彩!

查看全部评分


发表于 2019-9-13 08:17:07 | 显示全部楼层   广东省深圳市

感谢发布原创作品,精易因你更精彩!
回复 支持 反对

使用道具 举报

发表于 2019-5-22 16:30:48 | 显示全部楼层   内蒙古自治区呼伦贝尔市
感谢分享 学习 学习~!!~#@
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2019-4-17 22:58:18 | 显示全部楼层   广东省惠州市
谢谢分享!支持
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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