开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 1785|回复: 9
收起左侧

[技术专题] 关于易语言易包使用及编译

[复制链接]
发表于 2023-5-19 13:52:08 | 显示全部楼层 |阅读模式   山西省忻州市

前言

刚看到论坛一位小伙伴问了一下“易包是什么”,于是我也去搜集资料了解了一下。据我了解到的,大家对易包的解释为:易语言的dll;同时大家认为易包不好用或者不用易包的原因都是说:易包不支持静态编译。这两点就是我从搜索到的资料所了解的两点。

在我亲自操作时,确实发现易包不支持静态编译,但是易包的一些特性确实是挺有意思的。那么如果真的想要使用怎么办?

经过我的探索,易包虽然不可以静态编译,但是可以独立编译,静态编译和独立编译是不一样的,但是最后运行的效果实际上是差不多的,并不影响使用。因此我打算将易语言易包更加深入了解一些,还有一些网上资料有些未能强调到的地方写写,旨在提高对易包的理解,相信大家了解到这些内容后定能设计出出色的程序。

易包的使用

首先谈谈易包的使用。我最先了解到易包的是一个易语言贴吧的一个讨论帖子,楼主给出了一些简单是使用用例,我在这里重新总结一下,如果哪位大佬感兴趣,可以去原帖看看。原帖地址

这个帖子做了两件事,一是介绍什么是易包,用一句话来说就是:易语言的DLL。一是易包的使用。此外,易包的使用还分为了易包的基本命令,易包的调用和几个小例子。

1. 易包的5条基本命令

以下内容在“系统核心支持库-》易包”下面,更加详细的请自行打开易语言查看。

(1)载入易包文件

p9hrmrV.png
如图所示,要传入易包的文件名和易包名称,尤其是易包名称在以后的使用会更加的方便。官方是这么写这条命令的

预先载入所指定的易包文件(如果文件名未提供后缀则默认为".epk"),防止系统以后在程序中调用到该易包内公开子程序时采用默认方法自动载入.成功返回真,失败返回假.所载入易包不需要刻意去释放,在程序退出时会自动被释放.本命令不支持在多线程环境和静态编译模式下使用,注意本命令不会对所提交易包数据进行过多校验,用户必须执行保证该数据的正确性.本命令为高级命令。

(2)载入易包数据

p9hrGx1.png
如图所示,要传入易包名称和字节集的易包数据,官方是这么写这条命令的

预先载入所指定易包的数据,防止系统以后在程序中调用到该易包内公开子程序时采用默认方法自动载入.成功返回真,失败返回假.所载入易包不需要刻意去释放,在程序退出时会自动被释放.本命令不支持在多线程环境和静态编译模式下使用,注意本命令不会对所提交易包数据进行过多校验,用户必须执行保证该数据的正确性.本命令为高级命令。

(3)卸载易包

p9hr6Mt.png

这条命令只需传入易包名称即可实现卸载易包操作。返回逻辑型。

卸载已被载入的指定名称的易包,成功返回真,失败返回假.本命令不支持在多线程环境和静态编译模式下使用.执行本命令前,必须确保以下几点,否则后果无法预测:
1.在当前子程序执行堆栈中不存在所指定易包内的任何子程序;
2.所指定易包符合可卸载规范:任何使用文本/字节集/数组直接常量数据对易包公开子程序以显式或隐式参考方式传递进来的参数进行赋值时,都必须使用"复制常量"方法将该数据脱离常量状态,避免本易包被动态卸载后,外部调用程序引用该常量数据出错.
另外,最好所指定易包内加载的所有窗口均已经被关闭.本命令为高级命令。

(4)易包是否被载入

p9hr4iQ.png

这条命令只需传入易包名称即可检测易包是否被载入。返回逻辑型。

返回所指定名称的易包是否已经被载入.本命令不支持在静态编译模式下使用。本命令为高级命令。

(5)复制易包常量

p9hrOdU.png

本命令的主要作用是将易包内的常量转为变量

本命令仅在编译易包时有效,用作根据所提供的常量数据建立返回对应的非常量数据.在对易包公开子程序以参考方式传递进来的参数变量使用文本/字节集/数组三类常量进行赋值时,都必须先使用本命令进行转换,以避免所处易包被使用卸载命令释放后导致外部程序引用到非法的常量地址。本命令为高级命令。

2. 易包的调用方式

首先,大佬是这么写的
p9hsUln.png

在我运行时就不行了。首先我先贴出我的程序

  • 易包内容
    p9hs5TO.png
  • 易包测试的内容
    p9hs7fH.png

在我运行的时候则直接报错了
p9hyU4e.png

看到错误提示为:无法找到“易包.子程序1”,于是我将子程序名那里改成了易包内的子程序名称,程序就可以正常运行了。

可以看到,在这么一个子程序里面

子程序名 返回值类型 公开 易包 备注
子程序1 - - 易包名 -

易语言是通过“易包名.子程序1”来调用的,且子程序1要与易包中的公开函数定义一致。

看完这段内容,你应该了解到的是

  1. 易包不支持多线程
  2. 易包不支持静态编译
  3. 易包调用严格遵守要求

3. 易包使用的例程

关于例程,这里就不打算多费口舌了,因为论坛有大佬写的很好,但是也要提一下,方便大家学习。

首先推荐贴吧大佬的教程帖子地址,大佬的易包调用例程写的很明白,坛友们直接看着学习就好。

然后推荐学习论坛大佬的帖子用易包来写易程序的小程序,插件,甚至可以写补丁

即使你非要用静态编译,也有大佬整出来了【分享源码】易语言 易包 静态编译方法

独立编译和静态编译

到此为止,关于易包就是多线程和不允许静态编译的问题了。

关于多线程,易包写明了不支持多线程,我劝有心之人还是放弃这个想法吧,如果你是牛逼大佬,当我没说。

关于静态编译,已经有大佬有了对应的解决方案,在【分享源码】易语言 易包 静态编译方法 中可以学习如何来静态编译。

在我测试后,我认为使用独立编译将是一个更好的选择,独立编译不知道为什么大家都不喜欢用,但是在这个场景下是非常好用的。

从效果上看,静态编译是将核心库文件打包进exe文件内,独立编译是运行时将核心库解压到系统临时目录,二者在运行效果上几乎是一样的,目前还有什么其他不同或者有什么大的影响我尚未考虑到,如果有大佬看到,求指点。

关于易包和模块

大家在讨论到易包的时候,总会拿模块来进行对比,实际上,我认为这是不严谨的。

  • 模块的定位是C中的lib,在你开发时期,你可以引入任何模块,但是编译了以后你是不可以更改的。

  • 易包的定位是C中的DLL,在开发时期,你可以固定易包的调用方式,在软件编译后,可以提供不同的易包,来给予程序不同的功能实现。

因此单纯的说谁更好是不对的,你要了解什么场景下该用什么方式来实现,这才是使用这个技术核心。

评分

参与人数 2好评 +2 精币 +5 收起 理由
冰点 + 1 + 3 欢迎常来帮助新人,谢谢~
气质征服一切 + 1 + 2 此处应该有鼓励~

查看全部评分


签到天数: 6 天

发表于 2024-12-23 20:11:07 | 显示全部楼层   湖南省湘西土家族苗族自治州
易包原来是干这个的,学习了
回复 支持 反对

使用道具 举报

结帖率:79% (19/24)

签到天数: 9 天

发表于 2023-12-10 04:07:47 | 显示全部楼层   河南省鹤壁市
学习了
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 13 天

发表于 2023-12-8 17:09:27 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2023-7-7 17:37:54 | 显示全部楼层   山东省枣庄市
回复 支持 反对

使用道具 举报

结帖率:88% (21/24)
发表于 2023-7-3 16:01:57 | 显示全部楼层   四川省成都市
菜鸟前来学习 膜拜大佬
回复 支持 反对

使用道具 举报

结帖率:91% (115/126)

签到天数: 1 天

发表于 2023-6-17 06:51:30 | 显示全部楼层   吉林省长春市
优点可以给主程序做一个只是载入的。其他都放到易包。

缺点:泄露代码
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2023-5-28 23:21:30 高大上手机用户 | 显示全部楼层   湖南省永州市
独立编译  不能增加别的支持库,要是能手动加就好了
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 8 天

发表于 2023-5-22 20:01:11 | 显示全部楼层   湖南省娄底市
易包不支持多线程
易包不支持静态编译
易包调用严格遵守要求

既然是这样,为什么不直接编译成dll用呢
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 18 天

发表于 2023-5-19 17:49:51 | 显示全部楼层   广东省珠海市
因此单纯的说谁更好是不对的,你要了解什么场景下该用什么方式来实现,这才是使用这个技术核心。
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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