精易论坛

标题: 让用户随意使用的通用型支持库它来了! [打印本页]

作者: xiaole283    时间: 2023-12-9 19:47
标题: 让用户随意使用的通用型支持库它来了!
本帖最后由 xiaole283 于 2023-12-9 20:53 编辑

前言


易语言用户无法完全使用通用型。

支持库命令有通用型参数,支持一个参数输入所有类型。支持库也能正确识别参数的数据类型。

我们想不想子一个子程序即返回整数型,又返回文本型呢?甚至返回自定义数据类型、数组、类呢?为什么支持库命令能够返回这些任意类型,我们普通用户却不能返回呢?


何为通用型

通用型是一个指针。他记录了变量的数据本体,以及变量的数据类型。这也就是为什么支持库接收参数和返回的时候,能够使用任意类型。

论坛上已经有伪通用型存在。这种通用型只是拥有数据,而缺失了变量的数据类型标志。

也就是为什么这种伪通用型需要用汇编判断它的基础数据类型,还不一定准确。


本通用型支持库能做什么?

已经做到让用户完全使用通用型。能通用型传参、能返回通用型数据。再也不必因为参数和返回值有多种类型而新建多个子程序和多个参数。

完整体通用型让用户可以传递一切类型。你所见过的所有类型都可传参出去。

能传参任意类型,能返回任意类型。


通用型拥有空数据的标志。

基于这个特性,我们可以让空参多级子程序继承空标志。(也就是 是否为空()这个判断。不支持这个命令,具体判断方式看例子。)


通用型能随意使用吗?

可以,但有使用注意事项。

本质上通用型是一个指针,我们在进行传递非基础数据类型并赋值到变量的时候,会让接收变量和源变量拥有同一个数据区。当也就意味着接收变量和源变量是共享数据区的。

他们在销毁的时候,有一个先后顺序,第一次是能够正常销毁这个数据区的,第二个变量销毁的时候,因为数据区没了会崩溃。

所以,新的变量被赋予指针,使用完后需还原原有指针。

具体闭坑方法看本帖例子。


通用型变量如何输入?

通用型变量无法输入,吴涛大神并未想过要用户使用通用型。

输入方式:菜单栏→工具→复制通用型,然后粘贴到代码编辑区。



交流群:792773356



通用型支持库 例子1.2.rar (1.34 MB, 下载次数: 29)



补充内容 (2023-12-21 04:58):
更新到1.3版本:https://125.confly.eu.org/thread-14806654-1-1.html
作者: a524666979    时间: 2023-12-9 20:06
真的很需要!
作者: myxy1022    时间: 2023-12-9 20:09
感谢大佬分享
作者: 文西哥    时间: 2023-12-9 20:16
大佬就是大佬,学习一下,谢谢大佬分享
作者: 迷茫゛    时间: 2023-12-9 20:22
前排学习   
作者: FanLi    时间: 2023-12-9 20:58
学习一下,
作者: aismy    时间: 2023-12-9 21:21
好东西 感谢楼主
作者: 给自己留一片天空    时间: 2023-12-9 21:28
好东西 感谢楼主
作者: year1970    时间: 2023-12-10 15:20
感谢楼主分享
作者: sky01    时间: 2023-12-10 19:59
等待用户输入欲编译到的文件名
正在进行名称连接...
开始静态链接...
LIBC.lib(crt0dat.obj) : error LNK2005: __cinit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: _exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __cexit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __c_exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __C_Exit_Done already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __C_Termination_Done already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __exitflag already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __wpgmptr already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __pgmptr already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___winitenv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __wenviron already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___initenv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __environ already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___wargv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___argv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___argc already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winminor already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winmajor already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winver already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __osver already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __umaskval already defined in libcmt.lib(crt0dat.obj)
D:\工程\majserver\majserver2.exe : fatal error LNK1169: one or more multiply defined symbols found
作者: sky01    时间: 2023-12-10 20:02
通用_变量赋值()
通用_变量还原()
用这两个就没法静编,注释掉以后又可以静编了
开始静态链接...
LIBC.lib(crt0dat.obj) : error LNK2005: __cinit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: _exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __cexit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __c_exit already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __C_Exit_Done already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __C_Termination_Done already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __exitflag already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __wpgmptr already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __pgmptr already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___winitenv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __wenviron already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___initenv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __environ already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___wargv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___argv already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: ___argc already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winminor already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winmajor already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __winver already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __osver already defined in libcmt.lib(crt0dat.obj)
LIBC.lib(crt0dat.obj) : error LNK2005: __umaskval already defined in libcmt.lib(crt0dat.obj)
作者: xiaole283    时间: 2023-12-10 21:43
sky01 发表于 2023-12-10 20:02
通用_变量赋值()
通用_变量还原()
用这两个就没法静编,注释掉以后又可以静编了

奇怪,我的例子能够正常编译的.快发布新版了,我再看看
作者: sky01    时间: 2023-12-11 00:59
xiaole283 发表于 2023-12-10 21:43
奇怪,我的例子能够正常编译的.快发布新版了,我再看看

在你的例子里,我是可以用vc6编译器编译的
但是我实际copy过来运用的时候,调试是没问题的,就是静态编译不了
重新建立e文件再套用,还是没法编译哦~不知道我哪里操作不对
作者: xiaole283    时间: 2023-12-11 01:47
sky01 发表于 2023-12-11 00:59
在你的例子里,我是可以用vc6编译器编译的
但是我实际copy过来运用的时候,调试是没问题的,就是静态编译 ...

是不是有静态重名了
作者: xiaole283    时间: 2023-12-11 01:48
sky01 发表于 2023-12-10 19:59
等待用户输入欲编译到的文件名
正在进行名称连接...
开始静态链接...

进群来交流,我换静态名解决

作者: 朱星宇    时间: 2023-12-14 09:53



这个支持库是你写的吗?要是再加个 取值类型() 命令就挻好用的了。

作者: xiaole283    时间: 2023-12-16 03:05
朱星宇 发表于 2023-12-14 09:53
这个支持库是你写的吗?要是再加个 取值类型() 命令就挻好用的了。

这个不是我写的.我这个比这个功能多一些,也有取类型的命令
作者: luguidong2018    时间: 2023-12-16 13:14
看看效果
作者: 朱星宇    时间: 2023-12-19 11:18
简单测试了下,好东西,谢谢分享
作者: 朱星宇    时间: 2023-12-19 15:55


请问作者,什么时候能支持上图红框里的写法?
就是不需要转一次,直接赋值,那就更完美了

作者: 承易    时间: 2023-12-20 20:02
NB的功能阿
作者: xiaole283    时间: 2023-12-21 05:01
朱星宇 发表于 2023-12-19 15:55
请问作者,什么时候能支持上图红框里的写法?
就是不需要转一次,直接赋值,那就更完美了
...

没得办法,支持库就是用来转换它们实现相关功能。
作者: xiaole283    时间: 2023-12-21 05:02
朱星宇 发表于 2023-12-19 11:18
简单测试了下,好东西,谢谢分享

新版已经发布,支持更多功能。提供了任意类型到整数,应对其他模块、支持库命令需要整数型传参的情况。新增了队列功能,线程安全。新增子程序返回多种不同类型的命令。
作者: 我的yyy123    时间: 2024-1-10 09:08
试试,终于知道这个通用型怎么输入了
作者: cncnssf1135    时间: 2024-1-10 09:33
支持开源
作者: 白云飘飘    时间: 2024-1-11 11:03
感谢楼主分享
作者: 白云飘飘    时间: 2024-1-11 11:20
看看效果
作者: myfaint009    时间: 2024-2-17 10:44

感谢楼主分享
作者: yeheng    时间: 2024-2-18 19:14
  感谢楼主分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4