You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中通过bindgen引入Windows.h以完成SimConnect SDK绑定并构建MSFS2020插件?

解决Rust bindgen找不到Windows.h的问题

我之前也碰到过一模一样的情况——用bindgen生成MSFS2020的SimConnect SDK绑定,VS里编译C++项目能正常找到Windows.h,但Rust构建环境就是死活找不到。核心原因是Rust的构建环境不会自动继承Visual Studio配置的Windows SDK和VC工具链路径,下面给你几个实用的解决办法:

方法一:用Visual Studio开发者命令提示符构建

这是最省心的办法,因为VS的开发者命令提示符会自动运行vcvarsall.bat,把Windows SDK、VC工具链的头文件和库路径全部注入到环境变量里:

  1. 打开「开始菜单」,搜索「Developer Command Prompt for Visual Studio 2022」(如果是专业版就选对应的Professional版本)
  2. 在这个命令提示符里切换到你的Rust项目目录
  3. 直接运行cargo build或cargo check,bindgen就能顺利找到Windows.h了

方法二:在build.rs中手动指定头文件路径

如果不想每次都依赖开发者提示符,可以在项目的build.rs里手动给bindgen添加头文件搜索路径,步骤如下:

  1. 先找到你的Windows SDK和VC工具链的头文件路径:
    • Windows SDK头文件通常在C:\Program Files (x86)\Windows Kits\10\Include\<你的SDK版本号>,里面有um(用户模式头文件)和shared(共享头文件)两个关键子目录
    • VC工具链的头文件在C:\Program Files\Microsoft Visual Studio\2022\<你的VS版本>\VC\Tools\MSVC\<编译器版本>\include
  2. 修改build.rs,给bindgen添加clang_arg参数指定这些路径:
use bindgen;
use std::env;
use std::path::PathBuf;

fn main() {
    // 替换成你自己的Windows SDK版本、VS安装路径和编译器版本
    let windows_sdk_version = "10.0.22621.0";
    let vs_install_path = "C:/Program Files/Microsoft Visual Studio/2022/Community";
    let msvc_version = "14.38.33130";

    // 构建完整的头文件路径
    let windows_sdk_include = format!("C:/Program Files (x86)/Windows Kits/10/Include/{}", windows_sdk_version);
    let um_include = format!("{}/um", windows_sdk_include);
    let shared_include = format!("{}/shared", windows_sdk_include);
    let msvc_include = format!("{}/VC/Tools/MSVC/{}/include", vs_install_path, msvc_version);

    // 生成SimConnect绑定
    let bindings = bindgen::Builder::default()
        // 指定SimConnect SDK的头文件路径(替换成你实际的路径)
        .header("vendor/SimConnect/SimConnect.h")
        // 添加所有必要的头文件搜索路径
        .clang_arg(format!("-I{}", um_include))
        .clang_arg(format!("-I{}", shared_include))
        .clang_arg(format!("-I{}", msvc_include))
        // 可选:过滤掉无关绑定,减少生成文件体积
        .whitelist_function("SimConnect.*")
        .whitelist_type("SimConnect.*")
        .generate()
        .expect("Failed to generate SimConnect bindings");

    // 将绑定文件输出到编译目录
    let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
    bindings
        .write_to_file(out_path.join("simconnect_bindings.rs"))
        .expect("Couldn't write bindings to file!");
}
  1. 保存后运行cargo build,bindgen就能正常找到Windows.h和SimConnect的头文件了

额外检查项

  • 确认LIBCLANG_PATH环境变量确实指向LLVM的bin目录(比如C:\Program Files\LLVM\bin),并且已经重启终端让环境变量生效
  • 检查Visual Studio安装时是否勾选了「Windows 10 SDK」或「Windows 11 SDK」组件,如果没装,打开VS Installer补充安装即可
  • 如果是64位项目,确保路径对应x64架构(32位项目则用x86路径)

内容的提问来源于stack exchange,提问作者P.E. Joëssel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:18:14