开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 6904|回复: 29
收起左侧

[已解决] 精易模块关于句柄bug

[复制链接]
结帖率:54% (37/68)
发表于 2017-5-25 17:07:22 | 显示全部楼层 |阅读模式   福建省漳州市
窗口句柄应该是长整数,而模块返回的句柄都是整数型。而易语言整数型是符号整数,也就是存在句柄为负数的情况。

模块中存在许多命令,句柄只判断大于0的情况,比如窗口取句柄——模糊 和 网页_取IE窗口句柄。正确是应该是句柄不等0。
其中网页_取IE窗口句柄严重影响了填表的初始化,结果就是不知道为什么软件就不能正常填表。

评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部002 + 1 + 5 决定使用官方标准。判断返回值是否为NULL

查看全部评分

结帖率:100% (5/5)
发表于 2022-6-6 15:53:21 | 显示全部楼层   广东省揭阳市
确实有负整数的句柄哦,我遇到了,用编程助手看了一下,确实是这样的。
1654501945(1).jpg
回复 支持 反对

使用道具 举报

结帖率:54% (37/68)
 楼主| 发表于 2018-10-25 18:09:14 | 显示全部楼层   福建省漳州市
晓天信 发表于 2018-10-20 11:22
我现在也遇到了这个为了

精易模块升级最新版本就可以了,之前反馈过了已经改了。判断句柄是否有效的条件是:  句柄是否等于0,小于0的句柄也是有效的。
回复 支持 反对

使用道具 举报

结帖率:82% (28/34)
发表于 2018-10-20 11:59:22 | 显示全部楼层   湖南省永州市
大佬 你这个问题 解决了吗 我的还没解决
回复 支持 反对

使用道具 举报

结帖率:82% (28/34)
发表于 2018-10-20 11:23:01 | 显示全部楼层   湖南省永州市
我现在也遇到了这个问题了· 取到的句柄有负数的
回复 支持 反对

使用道具 举报

结帖率:82% (28/34)
发表于 2018-10-20 11:22:48 | 显示全部楼层   湖南省永州市
我现在也遇到了这个为了
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2017-7-5 20:08:46 | 显示全部楼层   广东省深圳市
观摩观摩  学习下
回复 支持 反对

使用道具 举报

发表于 2017-6-24 11:51:02 | 显示全部楼层   广东省揭阳市
看到了大家激烈的讨论。我也查阅了官方的资料,官方对于FindWindow返回值说明是这样的
  1. Return value
  2. Type: HWND
  3. If the function succeeds, the return value is a handle to the window that has the specified class name and window name.
  4. [b]If the function fails, the return value is [color=#ff0000]NULL[/color][/b]. To get extended error information, call GetLastError.
复制代码

如果函数失败,返回值是NULL(C语言中定义为0)


这里呢,决定使用官方的标准,即:判断返回值是否等于0(NULL),如果等于0则表示失败。


回复 支持 反对

使用道具 举报

结帖率:54% (37/68)
 楼主| 发表于 2017-5-26 13:08:30 | 显示全部楼层   福建省漳州市
黑白郎君 发表于 2017-5-26 12:32
这问题似乎越扯越远了,没有紧密联系的问题。再讨论也没意义。一个想表达句柄 用整数型,溢出会变负数,这 ...

我百度了,并搜索了论坛。找到几个和我一样的例子。无一例外的就是 他们的软件高频次的句柄操作。比如我的软件是全年无休运行的,一天取句柄的次数最少35万次。在这种高频率的情况下,取到负数变成很经常,但也绝大部份是正整数。如果只偶尔几次,那都取到的是正值。而且不只精易模块取到的会是负的,其他模块也一样。超文本浏览框.取窗口句柄也存在是负值,而且无数次验证整数型负数句柄是可以操作的。我得出这个结论用了半年,我的软件我整整开发了4年,现在还在修改。因为这个bug困扰了我无数次,我修正以后就没再发现相关问题。我只提供一个精易命令bug,其他相似。
.版本 2

.子程序 窗口_取句柄_模糊 整数型, 公开, 成功返回指定窗口句柄,失败返回0
.参数 窗口标题, 文本型, 可空, 标题支持模糊,如窗口的标题为【精易⌒技术交流群①】你只需要【流群①】取可
.参数 窗口的类名, 文本型, 可空, 类名必须为精确的,或者不填
.局部变量 窗口句柄, 整数型
.局部变量 TitleName, 文本型

.判断循环首 (真)
    窗口句柄 = FindWindowExA_文本 (0, 窗口句柄, 窗口的类名, 字符 (0))
    .如果 (窗口句柄 > 0)
        TitleName = 到小写 (窗口_取标题 (窗口句柄))

        .如果真 (寻找文本 (TitleName, 到小写 (窗口标题), , 假) ≠ -1)
            返回 (窗口句柄)
        .如果真结束

    .否则
        跳出循环 ()
    .如果结束

.判断循环尾 ()
返回 (0)


这种高频次取句柄的情况下,必须是窗口句柄不等于0才对。你可以不相信我,但我相信我的所见所得,因为你们并没有和我相同的经历。
回复 支持 反对

使用道具 举报

结帖率:67% (4/6)
发表于 2017-5-26 12:32:41 | 显示全部楼层   广东省广州市
这问题似乎越扯越远了,没有紧密联系的问题。再讨论也没意义。一个想表达句柄 用整数型,溢出会变负数,这是没错的,溢出了当然是负数,那么问题又来了,句柄有可能超过整数型的范围吗?这问题又是可以认为是不可能的!毕竟范围已经达到了十位数,还是回到原来的问题。说的改为不等于0就正常了,你这代码具体怎么样的,没贴出来也无法讨论。
回复 支持 反对

使用道具 举报

结帖率:54% (37/68)
 楼主| 发表于 2017-5-26 08:13:01 | 显示全部楼层   福建省漳州市
猥琐小胖子 发表于 2017-5-25 21:27
窗口句柄用4字节表示没问题。
你最好说下啥情况下另外代码改啥的。
还有64位和32位之间的共享也是用的4字 ...

有符号整数,因为有正负之分,所以最高位的表示正负,0为正,1为负。
.版本 2

t = 2147483647;整数型最大值
b= t + 1
输出调试文本(b),b变成负数,即-2147483648。
但是这个数仍然是四字节。如果句柄要表示为大于0,就应该是长整数。
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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