关于函数指针参数获取值

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的内容也正常打印了,我不知道为什么

世界最好语言的追随者
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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