开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 6542|回复: 20
收起左侧

闲说易语言 模块及DLL 的一些事

[复制链接]
结帖率:67% (2/3)
发表于 2017-1-9 11:25:31 | 显示全部楼层 |阅读模式   广西壮族自治区河池市
很多人搞不清易语言模块与DLL的差别,我也搞不太清。……。…。…。…………
近日,写了一个模块,然后转换成DLL,很有一些心得,分享并讨论如下。

一、模块其实就是几个独立子程序源代码的程序集,是易语言的源代码,而DLL可以认为是模块的编译结果。
二、为什么要有模块?
  1、为了方便管理,方便其他人或自己调用,减少不必要的重复劳动,这是任何一个编程语言都具有的模块功能。
  2、被易语言的编辑环境所逼:
    易语言除了有一个程序集可以由您自定义将您的代码分到不同程序集体之外,其他方面简直弱智:
    A、所有DLL、常量、自定义数据类型都全部集中在一起,如果你写的程序中有较多的DLL或自定义类型等,特别是有一些内容一样但是名称可能不一样的,不仅是重复的问题,会看得眼花,试一下,从一个程序中抽取部分,构成一个模块,将是很烦人的事。
     所以,只能用模块,将他们分类,各自的DLL、数据类型与稳中有各自的子程序集中到一起,是为模块。
    B、易语言同一窗口下的事件子程序只能集中在一个程序集下,不允许分开。设想一下,你有一个窗口,窗口中有选择夹的n个子夹,每个子夹都有不同的列表框,按键等事件子程序,而所有这些事件子程序可能有上百个甚至上千个,查找一个子程序是什么感觉?

三、模块是源代码的集合,可以说是明码,不利于保护代码
四、模块可以编译成DLL,其他人无法再修改,更加安全吧。

五、DLL只能传入常规参数,不能传递组件参数,甚至不能传递字节集,参数不能具有可空标志,这是基本区别。

六、除此之外,很多人不知道,模块与DLL的最重要区别是什么???
  我来告诉你,尽管易语言没有明说,但是这个应该成为一个编程规范!
  就是:DLL不宜用支持库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  目前情况,必须用核心支持库,除了核心支持库外,不宜再用其他支持库!!!
  为什么?
  如果你还用其他支持库,你写成模块得了,为何写成DLL?这不是主要的,主要的是:
易语言编译时,不会识别DLL所用到的任何支持库,包括核心支持库,这个与模块最大的不同。
有些用了DLL的程序,编译后在你的电脑上运行正常,而到其他电脑甚至可能你自已电脑的其他目录运行时,就会提示缺少支持库!!!
希望:易语言能连核心支持库都不用的DLL出现。

八、DLL不宜用支持库,不用支持库,用什么?API,回答正确,这才是模块与DLL的根本区别,可以这么说,写模块时,用易语言的支持库,写DLL时就用API,这才是一种规范。
我用API的习惯是,凡是核心支持库的命令能做到的就不用API,一两行API代码能取代扩展支持库的,就不用支持库。
大家可以看看,有些模块,包括精易模块,明明核心支持库有同样的命令,非要用API搞个模块命令出来,简直画蛇添足,多此一举!

九,学易言编程,一定要写DLL,并且尽可能将模块写成DLL,这样才会提高。

十,再次给易语言提个建议,这个建议有很很多人提个过了:
易语言应该再出一个核心中核心支持库,该核心支持库与现有核心支持库完全兼容,但是仅包括最基本核心命令,不包括任何的组件(窗口)命令,完全可以从现有的核心支持库提取出来,大小控制在100KB以内,编译时直接包含进入文件中。
大家都知道,控制台程序、DLL程序、DOS程序等基本不会用到任何的窗口组件,为何背着一个大大的支持库呢,还容易给人家报病毒。
我用C写了一个小控制台程序(无任何窗口组件,供其他EXE文件调用),编译后才10K,而用E,1M多啊,报毒就不说了。

十一,给那些写模块或整理模块的同学一些建议:
1、将您的模块中核心支持库已经有的命令从你的模块清除,易语言有信息框,你非得搞个API_信息框,有意思吗?
2、







补充内容 (2017-1-9 11:26):

点评

一句话:模块≈DLL≈支持库   福建省宁德市  发表于 2017-1-9 12:06

评分

参与人数 3好评 +2 精币 +9 收起 理由
精易自媒体 + 1 + 5 支持开源~!感谢分享
冯古屋 + 1 新技能已get√
冰点 + 1 + 3 互相讨论,共同进步

查看全部评分


结帖率:95% (19/20)

签到天数: 2 天

发表于 2017-1-9 11:36:05 | 显示全部楼层   四川省成都市
有一种东西叫做黑月
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2017-1-9 11:37:44 | 显示全部楼层   广东省东莞市
DLL直接黑月啊  虽说可能会报毒  但功能完全可用
回复 支持 反对

使用道具 举报

结帖率:95% (19/20)

签到天数: 2 天

发表于 2017-1-9 11:40:22 | 显示全部楼层   四川省成都市
为什么精易模块要用易语言核心支持库和API。为的就是调用而不出错。你编译DLL,也可以直接调用精易模块的命令。包括使用黑月编译,都能完美的编译成dll。另外一个就是,易语言写一个空程序,顶多600KB。
回复 支持 反对

使用道具 举报

结帖率:95% (19/20)

签到天数: 2 天

发表于 2017-1-9 11:42:25 | 显示全部楼层   四川省成都市
易语言最开始模块是存在安全问题。不过DLL照样可以修改。易语言模块,新版本的易语言可以添加密码,这样就可以保护了。
回复 支持 反对

使用道具 举报

结帖率:94% (181/193)

签到天数: 21 天

发表于 2017-1-9 11:56:11 | 显示全部楼层   内蒙古自治区呼和浩特市
我觉得模块作者希望把常用代码或者api进行命名上的规范 也是一个出发点 当然您从效率上肯定是不支持的 但是既然都用模块了 调用方便是本身模块最大的功能 看个人取舍吧
回复 支持 反对

使用道具 举报

结帖率:83% (39/47)

签到天数: 25 天

发表于 2017-1-9 12:05:52 | 显示全部楼层   福建省宁德市
一句话:模块≈DLL≈支持库
回复 支持 反对

使用道具 举报

签到天数: 23 天

发表于 2017-1-9 13:15:39 | 显示全部楼层   云南省昆明市
说的不错,,,
回复 支持 反对

使用道具 举报

发表于 2017-1-9 13:46:09 | 显示全部楼层   北京市北京市
理解的有点偏激,不全对,但是也可以这么解释。
模块与dll都是打包一组功能供他人调用,唯一的区别就是一个类似API(模块),一个类似ABI(DLL)
可能有人不清楚API和ABI,说白了,API就是提供源码级的接口,ABI提供二进制级别的接口。
模块只能给易程序调用,而dll还可以用c等其他程序调用。
模块只能用e编写,e调用;dll可以用其他语言编写,其他语言调用,提供的是更底层的兼容。
还有,核心库里的 信息框,应该是包装的API(MessageBoxA/W),跟直接调用API信息框还是有区别的,虽然用起来结果一样。
嗯,黑月是个好东西,希望每个人都学一学。
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 1 天

发表于 2017-1-9 14:29:43 | 显示全部楼层   广东省东莞市
你可以不用易的窗口组件。自己用API写。再用黑月编译。就会很小了。
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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