Задать вопрос
@bakaronomka

Как решить проблему с созданием потока в динамической библиотеки, загруженной при помощи memory-module-sys?

Возникает проблема с создания самого потока, процесс завершается с кодом ошибки 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!");
	});
}
  • Вопрос задан
  • 61 просмотр
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы