Open21

windows-rsのアップデート情報

ピン留めされたアイテム

0.30.0

  • windowsクレートで再びハンドルの型が導入された
    これは0.29.0でHANDLEHWNDのようなハンドルの型がisizeのエイリアスになっていたのですが、再びニュータイプパターンになって厳密になりました。WPARAMLPARAMLRESULTなども同様のようです。
// 以下のように値を包まないといけない
LPARAM(0)

// ニュータイプパターンなので中の値にアクセスするには以下のようにする。
// 例えばlet lp = LPARAM(128);のような変数があるとき
lp.0

0.9.0

今まで

// 0.8.0まで
let surface: IDXGISurface = unsafe {
        swapchain
            .GetBuffer(0, &IDXGISurface::IID, surface.set_abi())
            .and_some(surface)?
};

だったのが、以下のように書けるようになった。

// 0.9.0
let surface: IDXGISurface = unsafe { swapchain.GetBuffer(0)? };

つまり型とIID(あとset_abi())を指定しなければならなかったところが型だけでよくなった。

0.9.1

0.10.0

  • metadataのアップデート
    win32metadataにおいて名前空間が大幅に変更されました。したがって、windows-rsでもwindows::build!などで使われるモジュールの名前が変っています。
    例えば、Windows::Win32::WindowsAndMessaging::*Windows::Win32::Intl::*
    Windows::Win32::UI::WindowsAndMessaging::*Windows::Win32::Globalization::*のようになります。

  • 列挙型の改善
    C++でWin32APIの列挙型のメンバを扱う場合と同じように書けるようになりました。
    例えば、今までのD3D12_RESOURCE_BARRIER_TYPE::D3D12_RESOURCE_BARRIER_TYPE_TRANSITIOND3D12_RESOURCE_BARRIER_TYPE_TRANSITIONだけでよくなりました。

  • 弱参照の実装

  • HSTRINGSendSync

  • HStringHSTRINGObjectIInspectableになった。

0.13.0

リンク先にあるcom_uriの例の引用します。
0.13.0以前は以下のコードだったのが

let mut uri = None;
let uri = CreateUri("http://kennykerr.ca", Default::default(), 0, &mut uri).and_some(uri)?;

let mut domain = BSTR::default();
uri.GetDomain(&mut domain).ok()?;

let mut port = 0;
uri.GetPort(&mut port).ok()?;

0.13.0から以下のコードになります。

let uri = CreateUri("http://kennykerr.ca", Default::default(), 0)?;

let domain = uri.GetDomain()?;
let port = uri.GetPort()?;

0.19.0

・COMインターフェイスの実装のサポート
・実装向けに多くの改善
・バイナリパッキングの削除

0.22

0.23でリンク時にエラーが出る問題が修正されました。

  • あらかじめパッケージ化されるようになった
    いままで自動生成されていたものがwindows-rsのsrc/Windowsにあらかじめ定義されました。
    この変更によりbuild.rsやbindingsクレートを作る必要がなくなり、以下のようにCargo.tomlのfeaturesに書けるようになりました。
[dependencies.windows]
version = "0.22.1"
features = [
    "Data_Xml_Dom",
    "Win32_Foundation",
    "Win32_Security",
    "Win32_System_Threading",
    "Win32_UI_WindowsAndMessaging",
]

featuresには依存するモジュールすべてを書く必要があります。
例えばCreateEventWの場合Win32_System_Threadingに定義されていますが、以下のようにcfgに依存しているfeatureが書かれておりWin32_FoundationWin32_Securityfeaturesに書く必要があることがわかります。

#[cfg(all(feature = "Win32_Foundation", feature = "Win32_Security"))]
pub unsafe fn CreateEventW<
ログインするとコメントできます