Skip to content

Bug: DEVMODEW struct issue #2138

@AmionSky

Description

@AmionSky

Which crate is this about?

windows

Crate version

0.40.0+

Summary

When using Win32::Graphics::Gdi::DEVMODEW in versions above 0.39.0, it returns the data incorrectly.

Toolchain version/configuration

Default host: x86_64-pc-windows-msvc
rustup home: C:\Users\csany.rustup

stable-x86_64-pc-windows-msvc (default)
rustc 1.65.0 (897e37553 2022-11-02)

Reproducible example

use windows::Win32::Graphics::Gdi::{EnumDisplaySettingsW, DEVMODEW, ENUM_CURRENT_SETTINGS};

fn main() {
    let mut devmode = DEVMODEW {
        dmSize: std::mem::size_of::<DEVMODEW>() as u16,
        ..Default::default()
    };

    let display = windows::w!("\\\\.\\Display1");

    if unsafe { EnumDisplaySettingsW(display, ENUM_CURRENT_SETTINGS, &mut devmode).as_bool() } {
        println!(
            "{}x{} {}bit {}hz",
            devmode.dmPelsWidth,
            devmode.dmPelsHeight,
            devmode.dmBitsPerPel,
            devmode.dmDisplayFrequency
        );
    } else {
        println!("Failed to get display settings");
    }
}

Crate manifest

[package]
name = "dummy"
version = "0.1.0"
edition = "2021"

[dependencies.windows]
version = "0.40.0"
features = [
    "Win32_Foundation",
    "Win32_Graphics_Gdi",
]

Expected behavior

Print out "1920x1080 32bit 120hz", as it does on 0.39.0.

Actual behavior

Prints out "0x120 1080bit 0hz"

Additional comments

The bug maybe caused by it being initialized with Default::default()?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions