Rust WINAPI 输出 HMODULE 值

Rust WINAPI outputting HMODULE value

我正在尝试编写一个调用 WINAPI 的简单 Rust 控制台应用程序。

我将省略代码中明显的 use 和 extern crate 部分。这是:

fn win32_string(value : &str ) -> Vec<u16> {
    OsStr::new( value ).encode_wide().chain( once( 0 ) ).collect()
}

fn main() {
    println!("=====  Rust Windows experiment #1  =====");

    let module_name = win32_string("ntdll.dll");

    let h_instance: HMODULE;

    unsafe {
        h_instance = GetModuleHandleW(module_name.as_ptr());
    }

    println!("Value of h_instance: {:#?}", h_instance);
}

我正在针对目标三元组构建它:

[build]
target = "i686-pc-windows-msvc"

如您所见,我的目标是构建一个 32 位应用程序。现在我的程序输出如下:

=====  Rust Windows experiment #1  =====
Value of h_instance: 0x00007ffb61c40000

显示的是 64 位地址。这怎么会发生?我是否将 HMODULE 值错误地写入了控制台,或者我做错了什么?

在 rodrigo 的帮助下:build 标签应该包含在 .cargo\config 文件中而不是 cargo.toml 文件中,以便编译器能够获取它。 :) 更改后,问题现已解决。 :)