Возникает проблема с создания самого потока, процесс завершается с кодом ошибки 0xc0000005, STATUS_ACCESS_VIOLATION. Динамическую библиотеку собираю как cdylib. Версия Rust последняя, канал стабильный.
Использую крейт memory-module-sys, и я хочу им пользоваться. Уже 3 день пытаюсь понять и исправить, но ничего не выходит.
// main.rs
use std::ffi::CString;
use std::mem;
use std::thread::sleep;
use std::time::Duration;
use memory_module_sys::{MemoryGetProcAddress, MemoryLoadLibrary};
type FnTest = unsafe extern "C" fn();
fn main() {
let bytes = include_bytes!("../../../target/debug/module.dll");
let data = bytes.as_ptr() as *const std::ffi::c_void;
let size = bytes.len() as libc::size_t;
unsafe {
let module = MemoryLoadLibrary(data, size);
let name = CString::new("test").unwrap();
let addr = MemoryGetProcAddress(module, name.as_ptr());
let test: FnTest = mem::transmute(addr);
test();
}
loop { sleep(Duration::from_millis(100)); }
}
// lib.rs
use std::thread;
use std::thread::sleep;
use std::time::Duration;
#[no_mangle]
pub unsafe extern "C" fn test() {
println!("Hello from cdylib!");
thread::spawn(|| {
println!("Sleeping...");
sleep(Duration::from_millis(500));
println!("Done!");
});
}