精易论坛

标题: 精易模块 程序_标准输入Bug [打印本页]

作者: 苏轶    时间: 2025-5-4 08:31
标题: 精易模块 程序_标准输入Bug
之前其实我也和精易反馈过这个问题,但是呢,却一直没有收到结果。问题很简单:就是运行 程序_标准输入 后不管你怎么填它都是直接退出。

现在我把代码发给你们,你们运行后看看是否存在类似的问题。

我先给大家把它的源码放出来:
.版本 2


.子程序 程序_标准输入, 逻辑型, 公开
.参数 数据, 字节集, 参考 可空, 该参数值为返回值
.局部变量 handle, 整数型
.局部变量 max, 整数型
.局部变量 size, 整数型


handle = GetStdHandle (#STD_INPUT_HANDLE)
.如果真 (handle ≠ 0)
    .如果真 (PeekNamedPipe_字节集 (handle, 数据, 0, 0, size, 0))
        数据 = 取空白字节集 (size)
        .如果真 (size > 0)
            ReadFile_字节集 (handle, 数据, size, 0, 0)
        .如果真结束
        返回 (真)
    .如果真结束


.如果真结束
返回 (假)



这里我建议精易不要使用PeekNamedPipe,因为这个函数主要是针对管道的,而不是控制台(否则可能失败);还有,GetStuHandle失败时返回的是INVALID_VALUNE_HANDLE(-1),不是NULL(0),只有当应用程序没有关联的标准句柄,并且尚未重定向这些句柄时函数才会返回NULL;此外,ReadFile的参数lpNumberOfBytesRead只有当lpOverlapped不为NULL时此参数才能为NULL,否则就不行,换句话说就是参数lpNumberOfBytesRead和lpOverlapped不能同时为NULL,这段代码已经被我找出3个问题了,建议精易将这段代码改为:


.版本 2

.子程序 程序_标准输入, 逻辑型, 公开
.参数 数据, 字节集, 参考 可空, 该参数值为返回值
.局部变量 handle, 整数型
.局部变量 int, 整数型

handle = GetStdHandle (#STD_INPUT_HANDLE)
.如果真 (handle ≠ -1)
    数据 = 取空白字节集 (4096)
    返回(ReadFile_字节集 (handle, 数据, 4096, int, 0)
.如果真结束
返回 (假)


最后,希望精易模块不要停更!

bug.PNG (248.27 KB, 下载次数: 2)

bug.PNG

精易bug.e

955.44 KB, 下载次数: 0, 下载积分: 精币 -2 枚


作者: qeo625    时间: 2025-5-24 20:59
支持一下 我看看看
作者: panaowei    时间: 2025-6-20 17:34

支持一下 我看看看




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