我正在使用winapi crate从Rust调用ResumeThread
WinAPI函数。
文档说:
如果函数成功,则返回值是线程以前的挂起计数。
如果函数失败,则返回值为 (DWORD( -1。
如何有效地检查是否存在错误?
在 C 语言中:
if (ResumeThread(hMyThread) == (DWORD) -1) {
// There was an error....
}
在 Rust 中:
unsafe {
if ResumeThread(my_thread) == -1 {
// There was an error....
}
}
the trait `std::ops::Neg` is not implemented for `u32`
我理解这个错误;但是在语义上与C代码相同的最佳方式是什么?对照std::u32::MAX
检查?
在 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....
}
另请参阅:
- 如何安全且习惯地在数值类型之间进行转换?
- 整数之间的转换贵吗?
- From::from 和 as 在 Rust 中有什么区别?
- 在 Rust 中,"as"是一个运算符吗?
- 如何在 Rust 中将布尔值转换为整数?
是的,要么std::u32::MAX
,要么!0u32
(相当于 C~0UL
,它强调了它是给定类型的全位设置值的事实(。