- winapiクレートを使用する方法: Rustのwinapiクレートは、Windows APIの関数や定数を提供しています。まず、Cargo.tomlファイルにwinapiクレートを追加します。
[dependencies]
winapi = "0.3.9"
次に、以下のようにコードを記述してWindows APIを使用します。
extern crate winapi;
use winapi::um::winuser::{MessageBoxW, MB_OK};
use winapi::shared::ntdef::LPCWSTR;
use std::ptr;
fn main() {
let message = "Hello from Rust!";
let title = "Windows API Example";
let message_ptr = message.encode_utf16().chain(Some(0)).collect::<Vec<_>>();
let title_ptr = title.encode_utf16().chain(Some(0)).collect::<Vec<_>>();
unsafe {
MessageBoxW(
ptr::null_mut(),
message_ptr.as_ptr() as LPCWSTR,
title_ptr.as_ptr() as LPCWSTR,
MB_OK
);
}
}
この例では、Win32のMessageBoxW関数を使用してメッセージボックスを表示しています。
- widestringクレートを使用する方法: widestringクレートは、UTF-16エンコーディングをサポートする文字列型を提供します。これを使用することで、Unicode文字列をWindows APIに渡すことができます。まず、Cargo.tomlファイルにwidestringクレートを追加します。
[dependencies]
widestring = "0.4.0"
次に、以下のようにコードを記述してWindows APIを使用します。
extern crate winapi;
extern crate widestring;
use winapi::um::winuser::{MessageBoxW, MB_OK};
use widestring::U16CString;
fn main() {
let message = U16CString::from_str("Hello from Rust!").unwrap();
let title = U16CString::from_str("Windows API Example").unwrap();
unsafe {
MessageBoxW(
std::ptr::null_mut(),
message.as_ptr(),
title.as_ptr(),
MB_OK
);
}
}
この例では、U16CString型を使用してUTF-16エンコーディングの文字列を作成し、それをMessageBoxW関数に渡しています。
以上のように、RustでWindows APIを使用する方法を紹介しました。これらのコード例を試してみて、Windowsプラットフォーム上でのアプリケーション開発に役立ててください。