Lua Alien - Win32 API中WaitForSingleObject函数中定义的变量

我正在使用Alien for Lua来引用Windows Kernel32.dll中的WaitForSingleObject函数

我对Windows编程还比较陌生,所以我有一个问题,就是有关WaitForSingleObject文档中引用的以下#define d变量:

INFINITE如果dwMilliseconds是,则函数仅在对象发出信号时才返回。

什么是INFINITE值?我本能地认为它应该是-1,但我无法在任何地方找到这个文档。

此外,下表中提到了十六进制的返回值,但我对最后一位数字后面的L字符感到困惑。这可能只是将它转换为Long型?

图表

我问这个问题的原因是Lua使用Number数据类型,所以我不确定我是否应该通过十六进制数字(0 - F)或十进制数字(0 - 9)来检查此返回值?

点赞
用户1366973
用户1366973

这个想法在我脑海中闪过,打开一个 C++ 应用程序并打印出这些值,所以我就这样做了:

#include <windows.h>
#include <process.h>
#include <iostream>

int main()
{
    std::cout << INFINITE;
    std::cout << WAIT_OBJECT_0;
    std::cout << WAIT_ABANDONED;
    std::cout << WAIT_TIMEOUT;
    std::cout << WAIT_FAILED;
    system("pause");
    return 0;
}

基于我的发现,最终的 Lua 结果如下:

local INFINITE = 4294967295
local WAIT_OBJECT_0 = 0
local WAIT_ABANDONED = 128
local WAIT_TIMEOUT = 258
local WAIT_FAILED = 4294967295
2013-07-23 16:58:19
用户257299
用户257299

我试着在谷歌上搜索相同的信息,最终我找到了这个问答。

我找到了两个有关 #define INFINITE 0xFFFFFFFF 的来源:

对于函数 WaitForSingleObject,参数 dwMilliseconds 的类型是 DWORD

从这里获取:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types

我可以看到:DWORD 一个32位的无符号整数。

因此,@RemyLebeau 在上面的评论看起来是合理和有效的:

当作为有符号整数类型解释时,`4294967295`与`-1`相同。

简而言之:((DWORD) -1) == INFINITE

最后的评论:具有讽刺意味的是,这个“无穷大”感觉上与波音787的问题类似,他们需要每51天重新启动一次飞机。感觉上有点可怖/相似!

2022-10-08 15:06:18