精易论坛

标题: 呵呵仙_类_变量指向新指针DLL对第三方EXE结构体轻松赋值 [打印本页]

作者: 呵呵仙    时间: 2023-11-6 00:05
标题: 呵呵仙_类_变量指向新指针DLL对第三方EXE结构体轻松赋值
DLL.e (15.1 KB, 下载次数: 64)
主程序.e (4.52 KB, 下载次数: 59)

由于之前我出的EXE和DLL结构体(自定义数据类型)通信教程都是交换堆栈的方法,有人会认为也就易语言写的EXE和DLL才有效!其实第三方用HeapAlloc()构造成和易语言一样的结构体,也是可以!
好了,今天不是要交换变量,而是在DLL直接用等于号给EXE的结构体赋值,不是用写到内存()写偏移这吃力伤脑的写法!
为何要用这种方法?交换不好吗?好是好!但是,第三方语言要用时,就得用HeapAlloc()构造成和易语言一样的结构体.实在不省书写时间.用这方法就可以通用它们组建的结构体!数据释放工作是它们的事了,和易语言DLL无关了!

作者: 算法艺术家    时间: 2023-11-6 00:27
大佬不愧是大佬,完全听不懂你在讲什么
作者: 呵呵仙    时间: 2023-11-6 00:43
sunhechao 发表于 2023-11-6 00:27
大佬不愧是大佬,完全听不懂你在讲什么

当你要开发高效的DLL时,就知说我在说什么了!!
作者: 嫂子    时间: 2023-11-6 03:02
如果是其他语言 就不需要拷贝来拷贝去了。直接结构体指针接收就可以操作了
作者: zaozi    时间: 2023-11-6 07:52
开源精神必须支持
作者: 396384183    时间: 2023-11-6 08:27
谢谢分享
作者: sostemp    时间: 2023-11-6 08:29
谢谢呵大,收藏学习。
作者: 一指温柔    时间: 2023-11-6 08:50
支持开源~!感谢分享
作者: ZHuanR    时间: 2023-11-6 08:51
新技能已get√
作者: 就是那个秋    时间: 2023-11-6 09:44
不明觉厉                  
作者: wmv520    时间: 2023-11-6 10:30
        支持开源~!感谢分享
作者: tsl0413    时间: 2023-11-6 10:59
支持开源~!感谢分享
作者: quary    时间: 2023-11-6 11:25
谢谢楼主分享!!! 好人一生平安!!!
作者: 蓝河笑月    时间: 2023-11-6 11:37
支持开源~!感谢分享
作者: pipicool    时间: 2023-11-6 12:22
学习一下
作者: 784326742    时间: 2023-11-6 14:32
易语言DLL唯一不好的地方就是一卡就整体卡
作者: 呵呵仙    时间: 2023-11-6 16:59
784326742 发表于 2023-11-6 14:32
易语言DLL唯一不好的地方就是一卡就整体卡

DLL只是一个分享函数的载体.其实大部分语言都是调用WIN的DLL函数工作的!除开自创的汇编子程序!!所以,卡不卡不是DLL来决定的!是,有没用线程来工作决定的!!
作者: 深圳梦    时间: 2023-11-6 18:37
支持开源~!感谢分享
作者: 呵呵仙    时间: 2023-11-6 18:53
  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
_结构体整数型4
_文本文本型2
_结构体 [4]取变量地址 (_文本 [1])
XOB2 (取变量地址 (_结构体 [1]))
调试输出 (_结构体 [1], _结构体 [2])
编辑框1.内容 = _文本 [1]#换行符 + _文本 [2]


i支持库列表   支持库注释   
spec特殊功能支持库
如果是一次半次的调用,用数组建结构体都是可以的!

作者: ermituofo    时间: 2023-11-6 19:41
你的拖放模块使用用VC2017静态输出会出现内存出错,只能普通编译了。
作者: ttggnn    时间: 2023-11-6 21:06

支持开源~!感谢分享
作者: bianyuan456    时间: 2023-11-7 01:09
请问楼主,变量_还原这个调用前,不把之前的新的内存给释放么?大量这样调用的话会不会内存溢出呀!?
作者: bianyuan456    时间: 2023-11-7 01:11
我看楼主的这个,有点像java语言中的类的继承一样,子类通过继承可以获得父类的属性
作者: bianyuan456    时间: 2023-11-7 01:17
本帖最后由 bianyuan456 于 2023-11-7 01:20 编辑

还有,我分享一下,我个人在用易语言编程的时候,传的参数都是json格式的文本,json可以置文本、整数、字节集等等,起到结构体或者自定义类型的效果,线程传参数时把json格式的文本写到内存的地址传过去,线程里面再解析json。至于楼主这种类似于java中类的继承的效果,可以用json.复制()或者json.分离()命令。我觉得楼主这样的方法只适合不会json的易语言初级用户,还有突破易语言 瓶颈的高深用户。。
当然c/c++里面都是传指针的。

楼主的这个例子挺高深的,我看的似懂非懂,还是不懂。

作者: 查过    时间: 2023-11-7 07:59
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 豆豆灰常开心    时间: 2023-11-7 08:04
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 呵呵仙    时间: 2023-11-7 08:33
bianyuan456 发表于 2023-11-7 01:17
还有,我分享一下,我个人在用易语言编程的时候,传的参数都是json格式的文本,json可以置文本、整数、字节 ...

结构体是直接向指定位置写数据,你json文本就只是一个等同于取文本中间内容的,取出文本然后各种把文本转.效率低多少万倍!!
作者: 一指温柔    时间: 2023-11-7 09:03
感谢分享
作者: idbucunzai    时间: 2023-11-7 10:53
感谢分享,很给力!~
作者: zaozi    时间: 2023-11-7 12:13
支持开源~!感谢分享
作者: qq73s5456    时间: 2023-11-7 13:39
厉害厉害。
作者: kyo9766    时间: 2023-11-7 16:34

感谢分享,很给力!~
作者: bianyuan456    时间: 2023-11-8 11:25
呵呵仙 发表于 2023-11-7 08:33
结构体是直接向指定位置写数据,你json文本就只是一个等同于取文本中间内容的,取出文本然后各种把文本转. ...

你说的有道理。
作者: 呵呵仙    时间: 2023-11-8 12:52
bianyuan456 发表于 2023-11-7 01:09
请问楼主,变量_还原这个调用前,不把之前的新的内存给释放么?大量这样调用的话会不会内存溢出呀!? ...

不会内存溢出,易语言变量地址下是一个堆栈指针.我是把这个堆栈指针先请开一下.挂接另一个堆栈指针.这样就等同于现有DLL方的变量就是现在EXE方的变量.由于DLL和EXE是出自己同一个语言.所以系统会自动释放有需要释放的结构体成员中存在的各种文本变量,字节集变量,或多层的结构体.(会c++的可以理解为用指针强转为某个变量).当然,两个指针数据结构要一样才可以.不然.在系统自动释放就挂了.如何有不是易语言写的EXE调用,就不会这么方便了!当然,你可以用一个整数型先接收由DLL自动创建的非基本类型数据指针!然后,各种读内存.在然后用HeapFree()释放就是,不然,就像你说的内存溢出!如果是打算长久支持对某一种堆栈操作和释放的话.你可以自创变量!例如:易语言的文本型,字节集.
由于本人不精通c++.只会点火山和易语言.就用火山为例写了一下!!
https://125.confly.eu.org/forum.php?mod ... 14790991&extra=

作者: fengyewl    时间: 2023-11-9 00:06
        支持开源~!感谢分享
作者: testblog    时间: 2023-11-14 07:43
感谢分享。
作者: 胖子葛格    时间: 2023-11-18 13:42
感谢大神分享~!
作者: wlsk888    时间: 2023-11-21 11:01
谢谢分享,学习学习
作者: lm88818    时间: 2023-12-1 15:04
感谢分享,很给力!~
作者: 文西哥    时间: 2024-4-20 22:14
大佬就是大佬,学习一下,谢谢大佬分享
作者: wkn20051123    时间: 2024-4-23 22:38
谢谢大佬分享
作者: wolfpack    时间: 2024-5-28 09:41
不明觉厉。。。。。。。。。。。。。。。。。
作者: 凉兮    时间: 2024-5-28 09:42
实在不省书写时间.用这方法就可
作者: zht98    时间: 2024-7-6 14:33
谢谢分享,学习学习




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