请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 4170|回复: 5

[求助] raw.loadDll 多线程 变量失效问题

[复制链接]

1

主题

4

帖子

4

积分
交易币
0

新手入门

Rank: 1

发表于 2020-12-1 10:24:22 | 显示全部楼层 |阅读模式
需要调用一个第三方的dll
情况一:
var dll = raw.loadDll('1.dll');
dll.dosomething();
这样没有问题

情况二(因为dll比较大,加载会卡顿):
var dll;
thread.invoke(function(mainForm){
    mainFrom.dll = raw.loadDll('1.dll');
},mainFrom);

mb.external = {
    go = function(){
//        此处打印dll变量为null
        dll.dosomething();
    }
};
请问清空二为什么会出现这种情况?谢谢
回复

使用道具 举报

0

主题

6

帖子

4

积分
交易币
0

新手入门

Rank: 1

发表于 2020-12-1 10:56:46 | 显示全部楼层
本帖最后由 warter 于 2020-12-1 10:58 编辑

写多线程的代码 - 不要有单线程的简单思维。

建议看一下开始页入门教程里有写,DLL对象不是窗口或控件这样的特权对象不能跨线程使用。而且也没有必要这样用,如果大到加载都会卡顿的DLL文件 - 建议直接扔了。

如果非要跨线程调用,你应当通过其他方法跨线程调用这个DLL,例如 thread.command,而不是直接把DLL传过去。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2020-12-1 18:59:13 | 显示全部楼层
warter 发表于 2020-12-1 10:56
写多线程的代码 - 不要有单线程的简单思维。

建议看一下开始页入门教程里有写,DLL对象不是窗口或控件这样 ...

我就是要围绕这个dll做东西,dll大概29M,我用thread.table,thread.set都试过不行,好像只能装普通对象变量,
还有个最主要的是这个dll需要先调用一个open方法(类似于初始化方法)才可以调用其他的方法,其他的方法在任何时刻都可能调用,所以我希望dll对象在主线程,其他线程来初始化和调用方法。
随便冒昧的问下,易语言的dll命令定义表是如何实现的呢,并没有加载dll的地方?aardio应该也有这样的方式么?
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2020-12-1 19:14:19 | 显示全部楼层
warter 发表于 2020-12-1 10:56
写多线程的代码 - 不要有单线程的简单思维。

建议看一下开始页入门教程里有写,DLL对象不是窗口或控件这样 ...

而且thread.command我在新的线程中调用 为什么会卡界面呢
回复 支持 反对

使用道具 举报

0

主题

6

帖子

4

积分
交易币
0

新手入门

Rank: 1

发表于 2020-12-10 02:19:49 | 显示全部楼层
不要动不动就冒昧冒昧,
提问题不要不经过脑子就去问别人。

另外下次举例子不要用易语言,因为会易语言的人很少,你这样问会被人鄙视,对你不友好,主动让别人对你不友好就是傻逼,明白?!所以用易语言就悄悄的用,不要让人知道,对你自己比较好。

没有任何语言调用DLL不需要加载,不需要加载调用空气吗?!
你看不到加载只是表示他动态调用DLL不行,打个比方一个人他腿瘸了从来不上街,你就问他为什么不上街为什么也能把腿搞瘸了这么牛逼,这不是扯淡吗?!

还有已经告诉你为什么不行,因为你思路错了,方法错了,你跟我说你就是要啥啥啥........杠精转世?!
回复 支持 反对

使用道具 举报

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

本版积分规则



GMT+8, 2021-3-8 10:56 , Processed in 0.081455 second(s), 24 queries .

© 2001-2011 Powered by Discuz! X3.2.

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