2

我使用winapi crateResumeThread从 Rust 调用 WinAPI 函数。

文档说:

如果函数成功,则返回值是线程之前的挂起计数。

如果函数失败,则返回值为 (DWORD) -1。

如何有效检查是否有错误?

在 C 中:

if (ResumeThread(hMyThread) == (DWORD) -1) {
    // There was an error....
}

在锈中:

unsafe {
    if ResumeThread(my_thread) == -1 {
            // There was an error....
    }
}
the trait `std::ops::Neg` is not implemented for `u32`

我理解错误;但是在语义上与 C 代码相同的最佳方式是什么?检查反对std::u32::MAX

4

2 回答 2

7

在 C 中,(type) expression称为类型转换。在 Rust 中,您可以使用as关键字执行类型转换。我们还给字面量一个显式类型:

if ResumeThread(my_thread) == -1i32 as u32 {
    // There was an error....
}

我个人会使用std::u32::MAX,可能重命名,因为它们是相同的值:

use std::u32::MAX as ERROR_VAL;

if ResumeThread(my_thread) == ERROR_VAL {
    // There was an error....
}

也可以看看:

于 2020-01-07T02:39:19.113 回答
3

是的,std::u32::MAX或者可能!0u32(相当于 C ~0UL,它强调它是给定类型的所有位设置值)。

于 2020-01-07T02:39:05.520 回答