关于函数指针参数获取值 | rust | rust 技术论坛-金年会app官方网

use std::ptr;
use std::sync::atomic::{atomicptr, ordering};
use winapi::shared::minwindef::bool;
use winapi::shared::windef::hwnd;
use winapi::um::winuser::*;
use lazy_static::lazy_static;
lazy_static! {
    static ref title: atomicptr<string> = atomicptr::new(&mut string::from(""));
}
fn main() {
    unsafe {
        enumwindows(some(enum_window), 0isize);
        let title = title.load(ordering::relaxed);
        println!("find:{:?}", ptr::read(title));
    }
}
extern "system" fn enum_window(w: hwnd, _: isize) -> bool {
    unsafe {
        let len = getwindowtextlengthw(w)1;
        let mut title:[u16;512] = [0;512];
        let real_len = getwindowtextw(w, title.as_mut_ptr(),len);
        let mut title_str = string::from_utf16_lossy(&title[..real_len as usize]);
        if title_str.ends_with("main.rs") {
            println!("title_str:{}",title_str);
            title.store(&mut title_str,ordering::relaxed);
            return false.into();
        }
        return true.into();
    }
}

代码如上,我需要遍历并查找指定窗口,当我查询到窗口后如何返回呢,目前是使用atomic实现,但这显然不是个好办法,求教一下应当怎么做。

另外,ptr::read(title)会导致程序意外退出,但title的内容也正常打印了,我不知道为什么

世界最好语言的追随者
讨论数量: 1

使用mutex去保存
或者使用 manuallydrop 去包装你的返回值 要注意手动回收

5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图