精易论坛

标题: 多个线程同时调用一个DLL命令 返回文本型 返回值异常 [打印本页]

作者: Babu    时间: 2022-3-7 21:47
标题: 多个线程同时调用一个DLL命令 返回文本型 返回值异常

DLL里就一个test函数,返回文本型:




开多个线程,调用这个test() 返回值,指针溢出了.这是什么情况呢



输出:


源码:
[attach]1157557[/attach]

作者: 帅气与大侠    时间: 2022-3-7 21:47
虽然不知道原理,但是用下面这个写法就没得问题
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
集_许可证整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
i整数型 
集_许可证 = 创建进入许可证 ()
计次循环首 (2, i)
启动线程 (&子程序1, i, )
计次循环尾 ()
子程序名返回值类型公开备 注
子程序1  
参数名类 型参考可空数组备 注
index整数型
变量名类 型静态数组备 注
ret文本型 
判断循环首 (index > 0)
进入许可区 (集_许可证)
ret = text ()
退出许可区 (集_许可证)
如果真 (取文本左边 (ret, 1)“1”)
调试输出 (ret, index)
暂停 ()
调试输出 (ret, index)
判断循环尾 ()


i支持库列表   支持库注释   
EThread多线程支持库
spec特殊功能支持库


作者: 神女软件定制    时间: 2022-3-7 21:49
线
作者: 一C    时间: 2022-3-7 21:49
上鱼刺      
作者: 大司命    时间: 2022-3-7 21:50

很正常!你这是局部变量,正常的时候只是刚好变量还没释放~
作者: Babu    时间: 2022-3-7 22:15
aqwvwv 发表于 2022-3-7 21:57
虽然不知道原理,但是用下面这个写法就没得问题
[e=1].版本 2
.支持库 EThread

您的方案加了锁等于执行test时还是单线程。不过我已经解决了,我在DLL里的test里返回文本指针 然后主程序里再指针到文本 发现就OK了

补充内容 (2022-3-7 22:17):
也不知道易语言什么BUG 不过返回指针就全正常 不用加锁

补充内容 (2022-3-7 22:23):
是的,这样做肯定不可靠,虽然返回了文本,但成了野指针,只能自己申请内存来返回了.易语言直接DLL返回文本型,在多线程不稳定.




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