Я пытаюсь написать некоторый код Rust, который использует Windows.Web.UI.Interop.WebViewControl
(который представляет собой внешнюю оболочку универсальной платформы Windows, специально разработанную так, чтобы приложения Win32 могли использовать EdgeHTML), и все это компилируется, но не работает должным образом во время выполнения.
Соответствующий код сводится к этому, используя ящики winit, winapi и winrt:
use winit::os::windows::WindowExt;
use winit::{EventsLoop, WindowBuilder};
use winapi::winrt::roapi::{RoInitialize, RO_INIT_SINGLETHREADED};
use winapi::shared::winerror::S_OK;
use winrt::{RtDefaultConstructible, RtAsyncOperation};
use winrt::windows::foundation::Rect;
use winrt::windows::web::ui::interop::WebViewControlProcess;
fn main() {
assert!(unsafe { RoInitialize(RO_INIT_SINGLETHREADED) } == S_OK);
let mut events_loop = EventsLoop::new();
let window = WindowBuilder::new()
.build(&events_loop)
.unwrap();
WebViewControlProcess::new()
.create_web_view_control_async(
window.get_hwnd() as usize as i64,
Rect {
X: 0.0,
Y: 0.0,
Width: 800.0,
Height: 600.0,
},
)
.expect("Creation call failed")
.blocking_get()
.expect("Creation async task failed")
.expect("Creation produced None");
}
Инстанцирование WebViewControlProcess
работает, а *Функция 1010 *, похоже, заботится о значении, которое она получила как host_window_handle
(передать 0 или единицу от фактического значения HWND
, и она жалуется).Тем не менее, IAsyncOperation
остается определенно на AsyncStatus.Started
(0), и поэтому вызов blocking_get()
зависает на неопределенное время.
Полная, работоспособная демонстрация проблемы (с немного большим количеством инструментария) .
У меня такое ощущение, что WebViewControlProcess
виноват: его ProcessId
застрял в 0, и он, похоже, не породил какой-либо подпроцесс.Событие ProcessExited
не , кажется, запускается (1026 *) (я прикрепил что-то к нему сразу после создания экземпляра, есть ли возможность его запустить до этого?).Вызов Terminate()
завершается неудачно, как и следовало ожидать в такой ситуации, E_FAIL
.
Я пропустил какую-то инициализацию для использования Windows.Web.UI.Interop
?Или есть какая-то другая причина, почему она не работает?