Tastenkombinationen

Drücken Sie oder , um zwischen den Kapiteln zu navigieren

Drücken Sie S oder /, um im Buch zu suchen

Drücken Sie ?, um diese Hilfe anzuzeigen

Drücken Sie Esc, um diese Hilfe auszublenden

Standalone Code-Generierung

Selbst bei einer Auswahl zwischen den crates windows und windows-sys ziehen es einige Entwickler möglicherweise vor, vollständig eigenständige Bindings zu verwenden. Die windows-bindgen-crate ermöglicht die Generierung vollständig eigenständiger Bindings für Windows-APIs mit einem einzigen Funktionsaufruf, den Sie von einem Test ausführen können, um die Generierung von Bindings zu automatisieren. Dies kann dazu beitragen, Ihre Abhängigkeiten zu reduzieren und gleichzeitig einen nachhaltigen Weg für zukünftige API-Anforderungen zu bieten oder einfach Ihre Bindings von Zeit zu Zeit zu aktualisieren, um automatisch Fehlerbehebungen von Microsoft zu übernehmen.

Warnung: Die Standalone-Code-Generierung sollte nur als letzter Ausweg für die anspruchsvollsten Szenarien verwendet werden. Es ist viel einfacher, die windows-sys-Crate zu verwenden und Cargo die Verwaltung dieser Abhängigkeit zu überlassen. Diese windows-sys-Crate bietet Roh-Bindings, ist intensiv getestet und weit verbreitet und sollte Ihre Build-Zeit nicht wesentlich beeinträchtigen.

Beginnen Sie damit, Folgendes zu Ihrer Cargo.toml-Datei hinzuzufügen

[dependencies.windows-targets]
version = "0.52"

[dev-dependencies.windows-bindgen]
version = "0.52"

Die windows-bindgen-Crate wird nur zur Generierung von Bindings benötigt und ist daher nur eine Entwicklungsabhängigkeit. Die windows-targets-Crate ist eine Abhängigkeit, die von den windows- und windows-sys-Crates gemeinsam genutzt wird und nur Importbibliotheken für unterstützte Ziele enthält. Dies stellt sicher, dass Sie gegen alle benötigten Windows-API-Funktionen linken können.

Schreiben Sie einen Test, um Bindings wie folgt zu generieren

#![allow(unused)]
fn main() {
#[test]
fn bindgen() {
    let args = [
        "--out",
        "src/bindings.rs",
        "--config",
        "flatten",
        "--filter",
        "Windows.Win32.System.SystemInformation.GetTickCount",
    ];

    windows_bindgen::bindgen(args).unwrap();
}
}

Verwenden Sie nach Bedarf beliebige Windows-APIs.

mod bindings;

fn main() {
    unsafe {
        println!("{}", bindings::GetTickCount());
    }
}