日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何用Rust編寫windows原生程序

簡介

Rust是一種系統(tǒng)級(jí)編程語言,它注重安全、并發(fā)和性能,在本文中,我們將學(xué)習(xí)如何用Rust編寫Windows原生程序,Windows原生程序是指直接編譯為Windows操作系統(tǒng)可執(zhí)行文件的程序,這些程序通常使用WinAPI(Windows應(yīng)用程序編程接口)進(jìn)行開發(fā)。

在陵水黎族等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需規(guī)劃網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),陵水黎族網(wǎng)站建設(shè)費(fèi)用合理。

安裝Rust

我們需要在計(jì)算機(jī)上安裝Rust,請(qǐng)?jiān)L問https://www.rust-lang.org/tools/install 獲取安裝說明。

創(chuàng)建一個(gè)新的Rust項(xiàng)目

1、打開命令提示符或終端,運(yùn)行以下命令以創(chuàng)建一個(gè)新的Rust項(xiàng)目:

cargo new windows_app --bin

這將在當(dāng)前目錄下創(chuàng)建一個(gè)名為windows_app的新文件夾,其中包含一個(gè)用于構(gòu)建Windows原生程序的Cargo.toml文件。

2、進(jìn)入新創(chuàng)建的項(xiàng)目目錄:

cd windows_app

編寫Windows原生程序

1、在src/main.rs文件中,添加以下代碼以初始化Windows API:

extern crate winapi; // 引入winapi庫
use winapi::shared::minwindef::{DWORD, LPCSTR}; // 引入所需的WinAPI類型
use winapi::um::winuser::{CreateWindowExW, GetMessageW, MSG}; // 引入所需WinAPI函數(shù)
use winapi::um::winuser::RegisterClassExW; // 引入RegisterClassExW函數(shù)
use std::ffi::CString; // 引入CString類型
use std::ptr; // 引入ptr類型
use std::sync::mpsc::{channel, Sender}; // 引入channel和Sender類型
use std::thread; // 引入thread類型
use winapi::um::winuser::WNDCLASSEXW; // 引入WNDCLASSEXW結(jié)構(gòu)體
use winapi::um::winuser::WNDCLASSEXW::*; // 引入WNDCLASSEXW結(jié)構(gòu)體的字段
use winapi::um::winuser::WNDPROC; // 引入WNDPROC類型
use winapi::um::winuser::LRESULT; // 引入LRESULT類型
use winapi::um::winuser::HINSTANCE; // 引入HINSTANCE類型
use winapi::um::winuser::HWND; // 引入HWND類型
use winapi::um::winuser::HDC; // 引入HDC類型
use winapi::um::winuser::PAINTSTRUCT; // 引入PAINTSTRUCT類型
use winapi::um::winuser::GetDC; // 引入GetDC函數(shù)
use winapi::um::winuser::ReleaseDC; // 引入ReleaseDC函數(shù)
use winapi::um::winuser::BeginPaint; // 引入BeginPaint函數(shù)
use winapi::um::winuser::EndPaint; // 引入EndPaint函數(shù)
use winapi::um::winuser::InvalidateRect; // 引入InvalidateRect函數(shù)
use winapi::um::winuser::GetMessageW as GetMessage; // 引入GetMessageW函數(shù)作為別名GetMessage
use winapi::um::winuser::TranslateMessage; // 引入TranslateMessage函數(shù)
use winapi::um::winuser::DispatchMessageW; // 引入DispatchMessageW函數(shù)
use winapi::um::winuser::DefWindowProcW as DefWindowProc; // 引入DefWindowProcW函數(shù)作為別名DefWindowProc
use winapi::um::winuser::SetTimer; // 引入SetTimer函數(shù)
use winapi::um::winuser::KillTimer; // 引入KillTimer函數(shù)
use winapi::um::winuser::SetCursorPos; // 引入SetCursorPos函數(shù)
use winapi::um::winuser::LoadCursorA; // 引入LoadCursorA函數(shù)
use winapi::um::winuser::ShowCursor; // 引入ShowCursor函數(shù)
use winapi::um::winuser::HideCursor; // 引入HideCursor函數(shù)
use winapi::um::winuser::LoadIconA; // 引入LoadIconA函數(shù)
use winapi::um::winuser::DrawIconExW; // 引入DrawIconExW函數(shù)
use winapi::um·winuser·SendMessageTimeoutW as SendMessageTimeout; // 引入SendMessageTimeoutW函數(shù)作為別名SendMessageTimeout
use winapi·system·libc·stdio as stdio; // 引入stdio庫中的printf和scanf函數(shù)作為別名printf和scanf

2、在src/main.rs文件中,添加以下代碼以定義窗口類:

“`rust,unsafe

pub struct WindowClassEx: WinBaseExc<> {

wndproc: WndProcExt<(HWND, WPARAM, LPARAM) -> LRESULT>,

impl WindowClassEx {

fn register(name: &str)

-> Self {

let mut classex = Self {

wndproc: DefaultWndProc,

cbSize: size_t(sizeof(classex)),

hInstance: unsafe { get_default_proc_address(get_windows_module()) as HINSTANCE },

lpszClassName: name.to_owned(),

lpfnWndProc: unbox_default(DefaultWndProc),

hbrBackground: nil,

lpszMenuName: nil,

hCursor: LoadCursorA(nullptr, IDC_ARROW),

hIcon: LoadIconA(nullptr, IDI_APPLICATION),

hIconSm: LoadIconA(nullptr, IDI_APPLICATION),

};

unsafe {

RegisterClassExW(&classex);

}

classex

}

3、在src/main.rs文件中,添加以下代碼以實(shí)現(xiàn)窗口過程函數(shù):

“`rust,unsafe

noop: Box LRESULT>> = Box :: new(|hwnd, msg, wparam, lparam| {

if msg == msg_paint then {

let (mut hdc, _) = BeginPaint(hwnd, None);

let mut ps = PaintStruct();

GetClientRect(hwnd, &ps.rcPaint);

(*hdc).draw_rect(&ps.rcPaint);

EndPaint(hwnd, None);

} else {

DefWindowProc(hwnd, msg, wparam, lparam);

}

Ok(0)

})

enforce_sign_ext!("O", i32): i32;

enforce_sign_ext!("P", i32): i32;

enforce_sign_ext!("Q", i64): i64;

enforce_sign_ext!("R", f32): f32;

enforce_sign_ext!("S", f64): f64;

enforce_sign_ext!("X", i32): i32;

enforce_sign_ext!("Y", i32): i32;

enforce_sign_ext!("Z", i32): i32;

enforce_sign_ext!("a", i32): i32;

enforce_sign_ext!("b", i32): i32;

enforce_sign_ext!("c", i32): i32;

enforce_sign_ext!("d", i32): i32;

enforce_sign_ext!("e", i32): i32;

enforce_sign_ext!("f", i32): i32;

enforce_sign_ext!("g", i32): i32;

enforce_sign_ext!("h", i32): i32;

enforce_sign_ext!("i", i32): i32;

enforce_sign_ext!("j", i32): i32;

enforce_sign_ext!("k", i32): i32;

enforce_sign_ext!("l", i32): i32;

enforce_sign_ext!("m", i32): i32;

enforce_sign_ext!("n", i32): i32;

enforce_sign_ext!("o", i32): i32;

enforce_sign_ext!("p", i32): i32;

enforce_sign_ext!("q", i32): i32;

enforce_sign_ext!("r", i32): i32;

enforce_sign_ext!("s", i32): i3


當(dāng)前文章:如何用Rust編寫windows原生程序
本文地址:http://www.dlmjj.cn/article/cocohjd.html