关于函数指针参数获取值 | 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
的内容也正常打印了,我不知道为什么
世界最好语言的追随者
使用mutex去保存
或者使用 manuallydrop 去包装你的返回值 要注意手动回收