virtual display remove static links
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
27e7b57222
commit
aa3b8ca084
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -5567,7 +5567,6 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
|||||||
name = "virtual_display"
|
name = "virtual_display"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dylib_virtual_display",
|
|
||||||
"hbb_common",
|
"hbb_common",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libloading",
|
"libloading",
|
||||||
|
5
build.py
5
build.py
@ -317,11 +317,6 @@ def main():
|
|||||||
os.system('python3 res/inline-sciter.py')
|
os.system('python3 res/inline-sciter.py')
|
||||||
portable = args.portable
|
portable = args.portable
|
||||||
if windows:
|
if windows:
|
||||||
# build virtual display dynamic library
|
|
||||||
os.chdir('libs/virtual_display/dylib')
|
|
||||||
os.system('cargo build --release')
|
|
||||||
os.chdir('../../..')
|
|
||||||
|
|
||||||
if flutter:
|
if flutter:
|
||||||
build_flutter_windows(version, features)
|
build_flutter_windows(version, features)
|
||||||
return
|
return
|
||||||
|
@ -9,4 +9,3 @@ edition = "2021"
|
|||||||
lazy_static = "1.4"
|
lazy_static = "1.4"
|
||||||
libloading = "0.7"
|
libloading = "0.7"
|
||||||
hbb_common = { path = "../hbb_common" }
|
hbb_common = { path = "../hbb_common" }
|
||||||
dylib_virtual_display = { path = "./dylib" }
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use virtual_display::win10::{idd, DRIVER_INSTALL_PATH};
|
use dylib_virtual_display::win10::{idd, DRIVER_INSTALL_PATH};
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
use std::{
|
use std::{
|
@ -11,6 +11,12 @@ lazy_static::lazy_static! {
|
|||||||
static ref MONITOR_PLUGIN: Mutex<Vec<u32>> = Mutex::new(Vec::new());
|
static ref MONITOR_PLUGIN: Mutex<Vec<u32>> = Mutex::new(Vec::new());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
#[cfg(windows)]
|
||||||
|
pub fn get_dirver_install_path() -> &'static str {
|
||||||
|
win10::DRIVER_INSTALL_PATH
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub fn download_driver() -> ResultType<()> {
|
pub fn download_driver() -> ResultType<()> {
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
|
@ -1,24 +1,52 @@
|
|||||||
#[cfg(windows)]
|
|
||||||
pub use dylib_virtual_display::win10;
|
|
||||||
|
|
||||||
use hbb_common::{bail, ResultType};
|
use hbb_common::{bail, ResultType};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
const LIB_NAME_VIRTUAL_DISPLAY: &str = "virtual_display";
|
const LIB_NAME_VIRTUAL_DISPLAY: &str = "dylib_virtual_display";
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
static ref LIB_VIRTUAL_DISPLAY: Arc<Mutex<Result<libloading::Library, libloading::Error>>> = {
|
static ref LIB_VIRTUAL_DISPLAY: Arc<Mutex<Result<libloading::Library, libloading::Error>>> = {
|
||||||
#[cfg(target_os = "windows")]
|
Arc::new(Mutex::new(unsafe { libloading::Library::new(get_lib_name()) }))
|
||||||
let libname = format!("{}.dll", LIB_NAME_VIRTUAL_DISPLAY);
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
let libname = format!("lib{}.so", LIB_NAME_VIRTUAL_DISPLAY);
|
|
||||||
#[cfg(target_os = "macos")]
|
|
||||||
let libname = format!("lib{}.dylib", LIB_NAME_VIRTUAL_DISPLAY);
|
|
||||||
Arc::new(Mutex::new(unsafe { libloading::Library::new(libname) }))
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
fn get_lib_name() -> String {
|
||||||
|
format!("{}.dll", LIB_NAME_VIRTUAL_DISPLAY)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
fn get_lib_name() -> String {
|
||||||
|
format!("lib{}.so", LIB_NAME_VIRTUAL_DISPLAY)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
fn get_lib_name() -> String {
|
||||||
|
format!("lib{}.dylib", LIB_NAME_VIRTUAL_DISPLAY)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn try_reload_lib() {
|
||||||
|
let mut lock = LIB_VIRTUAL_DISPLAY.lock().unwrap();
|
||||||
|
if lock.is_err() {
|
||||||
|
*lock = unsafe { libloading::Library::new(get_lib_name()) };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(windows)]
|
||||||
|
pub fn get_dirver_install_path() -> ResultType<&'static str> {
|
||||||
|
try_reload_lib();
|
||||||
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
|
Ok(lib) => unsafe {
|
||||||
|
match lib.get::<libloading::Symbol<fn() -> &'static str>>(b"get_dirver_install_path") {
|
||||||
|
Ok(func) => Ok(func()),
|
||||||
|
Err(e) => bail!("Failed to load func get_dirver_install_path, {}", e),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_device_created() -> bool {
|
pub fn is_device_created() -> bool {
|
||||||
|
try_reload_lib();
|
||||||
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
Ok(lib) => unsafe {
|
Ok(lib) => unsafe {
|
||||||
match lib.get::<libloading::Symbol<fn() -> bool>>(b"is_device_created") {
|
match lib.get::<libloading::Symbol<fn() -> bool>>(b"is_device_created") {
|
||||||
@ -31,6 +59,7 @@ pub fn is_device_created() -> bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn close_device() {
|
pub fn close_device() {
|
||||||
|
try_reload_lib();
|
||||||
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
Ok(lib) => unsafe {
|
Ok(lib) => unsafe {
|
||||||
match lib.get::<libloading::Symbol<fn()>>(b"close_device") {
|
match lib.get::<libloading::Symbol<fn()>>(b"close_device") {
|
||||||
@ -45,11 +74,12 @@ pub fn close_device() {
|
|||||||
macro_rules! def_func_result {
|
macro_rules! def_func_result {
|
||||||
($func:ident, $name: tt) => {
|
($func:ident, $name: tt) => {
|
||||||
pub fn $func() -> ResultType<()> {
|
pub fn $func() -> ResultType<()> {
|
||||||
|
try_reload_lib();
|
||||||
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
Ok(lib) => unsafe {
|
Ok(lib) => unsafe {
|
||||||
match lib.get::<libloading::Symbol<fn() -> ResultType<()>>>($name.as_bytes()) {
|
match lib.get::<libloading::Symbol<fn() -> ResultType<()>>>($name.as_bytes()) {
|
||||||
Ok(func) => func(),
|
Ok(func) => func(),
|
||||||
Err(..) => bail!("Failed to load func {}", $name),
|
Err(e) => bail!("Failed to load func {}, {}", $name, e),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
||||||
@ -59,11 +89,14 @@ macro_rules! def_func_result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn install_update_driver(reboot_required: &mut bool) -> ResultType<()> {
|
pub fn install_update_driver(reboot_required: &mut bool) -> ResultType<()> {
|
||||||
|
try_reload_lib();
|
||||||
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
Ok(lib) => unsafe {
|
Ok(lib) => unsafe {
|
||||||
match lib.get::<libloading::Symbol<fn(&mut bool) -> ResultType<()>>>(b"install_update_driver") {
|
match lib.get::<libloading::Symbol<fn(&mut bool) -> ResultType<()>>>(
|
||||||
|
b"install_update_driver",
|
||||||
|
) {
|
||||||
Ok(func) => func(reboot_required),
|
Ok(func) => func(reboot_required),
|
||||||
Err(..) => bail!("Failed to load func install_update_driver"),
|
Err(e) => bail!("Failed to load func install_update_driver, {}", e),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
||||||
@ -71,11 +104,14 @@ pub fn install_update_driver(reboot_required: &mut bool) -> ResultType<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn uninstall_driver(reboot_required: &mut bool) -> ResultType<()> {
|
pub fn uninstall_driver(reboot_required: &mut bool) -> ResultType<()> {
|
||||||
|
try_reload_lib();
|
||||||
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
match &*LIB_VIRTUAL_DISPLAY.lock().unwrap() {
|
||||||
Ok(lib) => unsafe {
|
Ok(lib) => unsafe {
|
||||||
match lib.get::<libloading::Symbol<fn(&mut bool) -> ResultType<()>>>(b"uninstall_driver") {
|
match lib
|
||||||
|
.get::<libloading::Symbol<fn(&mut bool) -> ResultType<()>>>(b"uninstall_driver")
|
||||||
|
{
|
||||||
Ok(func) => func(reboot_required),
|
Ok(func) => func(reboot_required),
|
||||||
Err(..) => bail!("Failed to load func uninstall_driver"),
|
Err(e) => bail!("Failed to load func uninstall_driver, {}", e),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
Err(e) => bail!("Failed to load library {}, {}", LIB_NAME_VIRTUAL_DISPLAY, e),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user