VSCodeを使ったRust開発でWin APIを呼び出すサンプル

この記事は公開から2年以上経過しています。

Windows 10とVSCodeを用いたRust開発で、windowsクレート(windows-rs/Rust for Windows)を使ってWindows APIのMessageBoxW関数を呼び出す簡単なサンプルを紹介します。

本エントリはRust開発環境が構築済の前提です。Rust開発環境の構築方法については、参考ウェブサイトの「Windows で Rust 用の開発環境を設定する」をご参照ください。


手順

  1. ターミナルで以下のコマンドを実行してRustのパッケージを作成、作成されたパッケージのフォルダをVSCodeで開く。

    cargo new test220103
    code test220103
  2. ターミナルで以下のコマンドを実行してcrates.ioから最新のwindowsクレート(Rust for Windows)のバージョンを取得する。

    cargo search windows

    コマンド実行結果は以下のとおり。windowsクレートのバージョンが0.29.0であることが分かる。

    windows = "0.29.0"               # Rust for Windows
    swayr = "0.12.0"                 # A LRU window-switcher (and more) for the sway window manager
    〜〜〜 省略 〜〜〜
  3. VSCodeのエクスプローラツリーからCargo.tomlを開き、以下のようにdependencies.windowsセクションの内容を追加する。

    [package]
    name = "test220103"
    version = "0.1.0"
    edition = "2021"
    
    # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
    
    [dependencies.windows]
    version="0.29.0"
    features =[
        "alloc",
        "Win32_Foundation",
        "Win32_UI_WindowsAndMessaging",
    ]

    Versionには手順2で取得したwindowsクレートのバージョンを指定する。
    featuresにはここでWinAPI名を検索すると得られる依存features名を記載する(下図)。

    file

  4. VSCodeのエクスプローラツリーからmain.rsを開き、元のコードを以下のサンプルコードに置き換える。

    use windows::{core::*, Win32::UI::WindowsAndMessaging::*};
    
    fn main() -> Result<()> {
        unsafe {
            MessageBoxW(None, "Hello Rust for Windows!", "Rust", MB_OK);
        }
    
        Ok(())
    }
  5. VSCodeでF5キーを押下するとデバッガが起動できない旨のエラー表示に続き下図のようなダイアログが表示されるので、Yesを選択してCargo.tomlからlaunch.jsonの自動生成を行う。

    file

    Yesを選択して生成されたlaunch.jsonは以下のとおり。

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "type": "lldb",
                "request": "launch",
                "name": "Debug executable 'test220103'",
                "cargo": {
                    "args": [
                        "build",
                        "--bin=test220103",
                        "--package=test220103"
                    ],
                    "filter": {
                        "name": "test220103",
                        "kind": "bin"
                    }
                },
                "args": [],
                "cwd": "${workspaceFolder}"
            },
            {
                "type": "lldb",
                "request": "launch",
                "name": "Debug unit tests in executable 'test220103'",
                "cargo": {
                    "args": [
                        "test",
                        "--no-run",
                        "--bin=test220103",
                        "--package=test220103"
                    ],
                    "filter": {
                        "name": "test220103",
                        "kind": "bin"
                    }
                },
                "args": [],
                "cwd": "${workspaceFolder}"
            }
        ]
    }


実行結果

Rustプログラムを実行すると、下図のようにWinAPI MessageBoxWでメッセージダイアログを表示します。

file


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする