开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 21903|回复: 100
收起左侧

[2017开源大赛(第二届)] 用 vs2017 写支持库

[复制链接]
结帖率:100% (26/26)
发表于 2017-11-14 00:50:50 | 显示全部楼层 |阅读模式   重庆市重庆市
本帖最后由 镇坛道德标杆 于 2017-11-14 01:21 编辑

经常想写一些支持库,虽然我也有“支持库洁癖”,但是是针对别人的库呀→_→

但是一直都被告知支持库一定要用 VC6.0 写,否则 vc98 无法 link,也就无法静编成功。。。

开玩笑,对于我们这种普通玩家来说,VC6.0 怎么写代码?2017 年了还用它简直是噩梦操作啊。。。

最近琢磨了一下,成功用 VS2017 封装 zlib 制作出了可以用 vc98 link 成功静编的支持库,制作的时候如丝般顺滑。。。

这里分享一下整个工程,并且配图分析。


开箱即用篇


工程解压后就只有如图所示这些:

Snipaste_2017-11-13_23-35-12.png

        .vs —— 一些配置文件,非常重要;
        JBzlib —— 工程源码、库、头文件等;
        JBzlib.sln —— 解决方案,安装好 vs2017 双击运行直接可以编译。

先不急着打开解决方案,先打开 JBzlib 文件夹:

Snipaste_2017-11-13_23-45-24.png

        elib —— 实际上就是易的安装目录下的 sdk 文件夹中的 elib,也就是官方提供的支持库开发 SDK,其实可以直接 include 的,但是为了打包我直接复制到工程里,这个是我自己电脑上的,5.4.1版本的 SDK,新版的貌似增加和改变了一些东西,更换的时候注意;
        zlib-1.2.8 —— zlib 1.2.8 的头文件(其实包括源文件也打包了),同样正常情况下是直接 include 的,但是为了打包我直接复制到工程里;
        zlibstat.lib —— zlib 的静态链接库;
        *.h、*.cpp、*.def —— 这些就是支持库的源文件和头文件等了;
        其它 —— vs 工程的文件;


好了现在打开刚才的 JBzlib.sln,注意在此之前一定要安装vs2017(安装的时候不要省空间,跟 c/c++ 有关的全打勾,包括单个组件也打勾,硬盘不值钱。):

JBzlib.h 里的 guid 一定不要自己随便编,用 guidgen.exe 来生成(只要你安装了 vs2017,电脑上就一定有 guidgen.exe,搜索一下,或者易的安装目录下也有):

Snipaste_2017-11-13_23-52-50.png

JBzlib.cpp 中是主要部分,包括支持库的常量、数据类型、导出命令以及命令的参数都在这里,注意 __E_STATIC_LIB 这个宏(都有汉字说明,别瞎改一般不会错):

Snipaste_2017-11-13_23-56-16.png

JBzlib.def 这个导出文件一定要有,改个名字复制进去啥都不用管:

Snipaste_2017-11-13_23-59-01.png

自带了 6 种配置:

Snipaste_2017-11-14_00-00-17.png

        fne、fne_bak —— 后者是前者的备份,用来编译生成 *.fne 动态支持库,但是无法静编;
        static_lib、static_lib_bak —— 后者是前者的备份,用来编译生成和 *.fne 对应的 *_static.lib 静态库,从而可以静编
        debug、release —— 创建项目自带的,不用管;




原理半解读篇



上面的部分顾名思义,给开箱即用的朋友用的,下面是解读原理,为什么说是半解读呢?因为也是个半吊子,很多都是玄学,凑合看下。

(注意:均以 vs2017 为例)

新建一个动态链接库项目:

Snipaste_2017-11-14_00-08-17.png

然后按照打包的工程进行一些文件的复制粘贴改名啥的库的导入啥的,能看到这里的应该这点不成问题吧?

然后打开项目属性页,右上角配置管理器,新建 fne 和 static_lib 的 win32 平台的空配置:

Snipaste_2017-11-14_00-10-54.png

然后按照打包的工程的 fne 和 static_lib 配置一项一项地对应着修改配置,不要问为什么,老夫也不知道为什么,它就这样就可以编译成功,不要问为什么,不要问。。。

注意 fne 和 static_lib 的有一个地方都要改一下,跟你的项目名对应,其它的不要动。。。不要动。。。

Snipaste_2017-11-14_00-13-13.png

原理很简单,vs 提供了这种平台工具集,相当于一种降级,就可以让 vc98 成功 link 了。

Snipaste_2017-11-14_00-14-57.png

但是,不要用你所希望使用的链接器无法链接的数据类型和函数,尽可能简单,当然如果你的易用的是 vs2015 甚至 vs2017 的链接器,就会好很多。



为什么要打这么多字配这么多图来分享,因为我希望抛砖引玉,能吸引到有能力的朋友来制作支持库,毕竟"用 VC6.0 做个支持库吧" 这种"厚颜无耻"的请求我都不好意思说出口,但是用 vs2017 的话就不一样了,至少是个先进的 IDE,对吧?希望大伙一起给易这潭死水增添一点活力,不要整天觉得别的语言鄙视自己,丰富类库,真正把快速开发、简单易用这些做到,还是可能有活路的。
(写到这里,想了想干脆建了个群用来交流,547525064,专注交流支持库制作,我自己是个 vc 苦手,希望来几个大佬日常指导~

哦对了对了,忘了说分享的这个支持库具体的用处了:

网页_gzip解压(),都用过吧,这个就是那个用处。
很多人可能跟我一样,用易写请求的时候,为了不多带一个.dll,都不进行压缩也不接收压缩。
但是做爬虫或者请求频繁的时候这样效率很低,用了 gzip 就不一样了,毕竟网络传输和本地解压相比,是很费很费很费时间和资源的。
解压速度方面,调试模式支持库比调试模式的 zlibwapi.dll 调用慢不少,但是编译后速度还是一致的,很可观。
支持库公开的为数不多的命令全是指针操作(没研究怎么让命令可以是自定义数据,而且指针的比较灵活,因为我觉得 gzip 不可预估长度,是更适合流式解压的。
修改了一下 zy 的 zlib 模块的代码,写了个 网页_gzip解压(),测试不多,有 BUG 反馈或者自行修改。


Snipaste_2017-11-14_00-27-45.png

这是一个非常非常干净的 XP,什么运行库都没有,也可以运行:

Snipaste_2017-11-14_00-46-06.png

源码和工程下载:

易源码:

网页_gzip解压.zip (386.04 KB, 下载次数: 374)

点评

可以降成VS2013不?   广东省深圳市  发表于 2018-8-20 17:17
可以降成VS2015不?   四川省宜宾市  发表于 2017-11-19 14:33

评分

参与人数 15好评 +12 精币 +32 收起 理由
zhongyayong + 1 支持开源~!感谢分享
张大仙 + 1 链接已经过期了
zz0147 + 1 + 2 新技能已get√
待删用户 + 1 + 1 支持开源~!感谢分享
冰点 + 1 + 5 支持开源~!感谢分享
福仔 + 1 共同努力,共同进步
拉面 + 1 + 8 支持开源~!感谢分享
大飛 + 1 + 5 支持开源~!感谢分享
天生是蠢材 + 1 新技能已get√
DerBai + 1 新技能已get√
冯古屋 + 1 + 1 支持开源~!感谢分享
nliger2015 + 1 + 2 感谢分享,很给力!~
猥琐小胖子 + 1 + 5 奉上小小红包希望笑纳
登峰望岳 + 1 感谢分享,很给力!~
酷宝贝 + 1 支持开源~!感谢分享

查看全部评分

本帖被以下淘专辑推荐:

结帖率:0% (0/1)
发表于 2023-4-25 10:58:41 | 显示全部楼层   浙江省杭州市
来看看问题
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2023-4-22 14:02:05 | 显示全部楼层   广东省茂名市
6666666666666666666
回复 支持 反对

使用道具 举报

结帖率:52% (11/21)

签到天数: 1 天

发表于 2022-12-31 19:46:58 | 显示全部楼层   江苏省苏州市
连接没了                  
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2022-3-7 19:24:59 | 显示全部楼层   湖南省长沙市
微云打不开了,下不了工程
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2022-1-23 06:34:48 | 显示全部楼层   广东省广州市
易语言可静态编译支持库指南
回复 支持 反对

使用道具 举报

发表于 2021-8-7 21:51:59 | 显示全部楼层   浙江省宁波市
学到了学到了
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:100% (1/1)
发表于 2020-11-19 04:11:18 | 显示全部楼层   安徽省合肥市
Decat 发表于 2018-6-4 13:10
开始静态链接...
test.obj : error LNK2001: 无法解析的外部符号 _JBzlib_zlibVersion
test.obj : error LN ...

大佬可以分想下么
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 10 天

发表于 2020-9-18 15:46:23 | 显示全部楼层   浙江省宁波市
不能下了,下载能共享一下吗
回复 支持 反对

使用道具 举报

结帖率:71% (5/7)
发表于 2019-7-3 21:10:56 | 显示全部楼层   湖南省怀化市
分享取消了。   麻烦楼主补一下连接
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2019-1-25 19:40:29 | 显示全部楼层   河南省周口市
支持支持支持支持支持支持
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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