webassembly 相关问题

WebAssembly或wasm是一种新的可移植,大小和加载时间有效的格式,适合于编译到Web。

错误警告:cpp 应用程序中未定义符号

我正在尝试编译 cpp,但出现如下错误: 警告:未定义符号:_ZN2cv3MatC1EiiiPvm(由顶级编译的 C/C++ 代码引用) 警告:未定义符号:_ZN2cv3MatD1...

回答 1 投票 0

将protobuf c++程序编译为wasm(WebAssembly)

我想将一个c++程序编译为wasm(webassemble)并通过wasmtime(wasm运行时)运行它,但失败了。 C++ 程序使用 protobuf,它已经使用 Emscri 从 src 代码编译而来...

回答 2 投票 0

如何在我的 wasm 模块中使用 api(Kotlin 多平台)

我有以下问题: 我需要在项目中使用 REST API,但无法在 WebAssembly (WASM) 模块中执行此操作。我一直在尝试使用以下代码: 暂停有趣的 fetchApiData(url:

回答 1 投票 0

Vite项目中使用?url导入WASM失败

背景:我是Vite新手,最近我正在尝试构建一个Markdown渲染项目,该项目从外部接收Markdown格式字符串并渲染GFM HTML。我选择 md4w 作为转换器并且...

回答 1 投票 0

在 Rust 代码中利用复制的 Trunk Web 应用程序资产

我正在使用 trunk 开发一个简单的 Web 应用程序,我想在其中复制几个 JSON 文件资源以便在一些 Rust 代码中运行时使用。我看到这个例子,他们使用 copy-dir 来链接资产,但是...

回答 1 投票 0

使用 emscripten 编译为 WASM 时在 C++ 中使用 protofub。从文档编译示例时出错

我需要帮助解决问题 我正在将 javascript 库的一部分重写为 wasm。 我使用以下命令将 C++ 代码编译为 wasm: emcc idw.cpp -Oz -s WASM=1 -s --no-entry -o idw.wasm (...

回答 1 投票 0

是否可以在 Blazor 的 DOM 事件中混合 Javascript 和 C# 代码?

我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: 我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: <button onclick="console.log('Showing event from Js: ' + event); @Test()">Test</button> @code { public void Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); } } 第一个问题是我收到错误“无法将类型 void 隐式转换为对象”,因此如果我更改 Test 方法签名只是为了返回一个对象 public object Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); return null; } 应用程序编译,但一旦页面加载,“Test()”函数就会自动执行,如果我单击按钮,它只会执行 Javascript 代码,而不是两段代码。 我知道我应该在 Blazor 中处理事件,在事件名称前添加“@”符号,以便调用 C# 方法,并使用互操作执行 Javascript 代码,但这样,我就无法使用默认的 Javascript“事件”我需要使用它,而不是 Blazor“事件”版本。 提前致谢! 只能有1个onclick属性,所以要么从JS调用C##方法,要么从C#调用JS代码。在这两种情况下,您都需要互操作,但不支持以您尝试的方式组合它。 “Test()”函数自动执行 是的,在onclick="... @Test()"中,它是在页面呈现时执行的,而不是在单击按钮时执行的。 您可以通过像往常一样将 C# 放置为内联属性,但将 javascript 添加为事件侦听器,让 JS 和 C# 触发同一个 DOM 事件。 例如在 App.razor 或 _Host.cshtml <body> 的底部 <script src="_framework/blazor.web.js"></script> <script> document.addEventListener("click", function(e){ if (e.target.id !== "testButton")return console.log("You clicked ", e.target.innerText) }) 您可能需要查找“如何将事件侦听器添加到动态生成的元素。” 内联,具有不同程度的黑客性,有时您可以使用“备用”javascript事件,其中几个事件几乎同时在同一元素上触发: <input @onchanged="Test" onblur="javascript:…" /> <input @oninput="Test" onkeyup="javascript:…" /> <select @onchanged="Test" oninput="javascript:…">...</select> <select @bind="Test" oninput="javascript:…">...</select> <button @onclick="Test" onmouseup="javascript:…">...</button>

回答 2 投票 0

可以在 Blazor 的 DOM 事件中混合 Javascript 和 C# 代码吗?

我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: 我正在尝试在 Blazor WebAssembly 中实现下一个目标;我需要能够侦听组件中的事件,并使用 Javscript 和 C# 代码,如下所示: <button onclick="console.log('Showing event from Js: ' + event); @Test()">Test</button> @code { public void Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); } } 第一个问题是我收到错误“无法将类型 void 隐式转换为对象”,因此如果我更改 Test 方法签名只是为了返回一个对象 public object Test() { JSRuntime.InvokeVoidAsync("console.log", "Showing log from C#"); return null; } 应用程序编译,但一旦页面加载,“Test()”函数就会自动执行,如果我单击按钮,它只会执行 Javascript 代码,而不是两段代码。 我知道我应该在 Blazor 中处理事件,在事件名称前添加“@”符号,以便调用 C# 方法,并使用互操作执行 Javascript 代码,但这样,我就无法使用默认的 Javascript“事件”我需要使用它,而不是 Blazor“事件”版本。 提前致谢! 只能有1个onclick属性,所以要么从JS调用C##方法,要么从C#调用JS代码。在这两种情况下,您都需要互操作,但不支持以您尝试的方式组合它。 “Test()”函数自动执行 是的,在onclick="... @Test()"中,它是在页面呈现时执行的,而不是在单击按钮时执行的。 是的,您可以添加 javascript 事件侦听器,以便 JS 和 C# 都可以运行。 例如在 App.razor 或 _Host.cshtml <body> 的底部 <script src="_framework/blazor.web.js"></script> <script> document.addEventListener("click", function(e){ if (e.target.id !== "testButton")return console.log("I caught ", arguments," in javascript!") }) 您可能需要查找“如何将事件侦听器添加到动态生成的元素。” 内联,具有不同程度的黑客性,有时您可以使用“备用”javascript事件,其中几个事件几乎同时在同一元素上触发: <input @onchanged="Test" onblur="javascript:…" /> <select @onchanged="Test" oninput="javascript:…">...</select> <select @bind="Test" oninput="javascript:…">...</select> <button @onclick="Test" onmouseup="javascript:…">...</button>

回答 2 投票 0

如何使用 Node.js 运行 Go WASM 程序?

我使用 Go 创建了一个测试 WASM 程序。在程序的 main 中,它向“全局”添加了一个 API,并在通道上等待以避免退出。它类似于典型的 hello-world Go WAS...

回答 2 投票 0

是否可以使用emscripten为WebAssembly编译x264?

我正在尝试为 WebAssembly 构建 x264 代码。 我使用emconfigure来配置。像下面这样 emconfigure ./configure --prefix="$(pwd)/em" --enable-shared --enable-static --disable-cli --d...

回答 2 投票 0

浏览器不使用 Flutter Web 应用程序的 Web 程序集

我正在构建一个 flutter web 应用程序(使用 flutter 3.22 和 Flame Engine)。我正在使用 --wasm 标志构建应用程序。 但 Chrome 和 Edge 都没有使用 wasm 模块,而是回退到 js....

回答 1 投票 0

如何从 Go 访客执行 Wasm 主机调用?

如何从 Go 客户端调用自定义 Wasm 主机函数? 我看过一些示例,显示加载独立的 witx/wat/wasm 定义的函数,但还没有找到 perfor 的示例...

回答 1 投票 0

关于 Blazor 自动渲染模式:下载 WASM 后我们可以立即删除 websocket 吗?

目前,如果我们对组件使用自动渲染模式,并且之前尚未在浏览器中下载 WASM,则在 WASM 下载完成后,SignalR 连接将保持打开状态...

回答 1 投票 0

MudBlazor 主题颜色在页面刷新时发生变化

我正在使用 MudBlazor 构建 Blazor WASM 应用程序,并且我正在使用浅色和深色模式的自定义主题。 主题提供程序位于 MainLayout.razor 文件中: 我正在使用 MudBlazor 构建 Blazor WASM 应用程序,并且我正在使用浅色和深色模式的自定义主题。 主题提供程序位于MainLayout.razor文件中: <MudThemeProvider Theme="@_theme" IsDarkMode="_isDarkMode" /> _isDarkMode字段首先初始化为null: private MudTheme? _theme = null; 但是他们在OnInitialized()中获得了一个实例: protected async override void OnInitialized() { base.OnInitialized(); _theme = new() { PaletteLight = _lightPalette, PaletteDark = _darkPalette, LayoutProperties = new LayoutProperties() }; } 主题在同一文件的下部定义: private readonly PaletteLight _lightPalette = new() { Black = "#110e2d", AppbarText = "#424242", AppbarBackground = "rgba(255,255,255,0.8)", DrawerBackground = "#ffffff", GrayLight = "#e8e8e8", GrayLighter = "#f9f9f9", }; private readonly PaletteDark _darkPalette = new() { Primary = "#7e6fff", Surface = "#1e1e2d", Background = "#1a1a27", BackgroundGray = "#151521", AppbarText = "#92929f", AppbarBackground = "rgba(26,26,39,0.8)", DrawerBackground = "#1a1a27", ActionDefault = "#74718e", ActionDisabled = "#9999994d", ActionDisabledBackground = "#605f6d4d", TextPrimary = "#b2b0bf", TextSecondary = "#92929f", TextDisabled = "#ffffff33", DrawerIcon = "#92929f", DrawerText = "#92929f", GrayLight = "#2a2833", GrayLighter = "#1e1e2d", Info = "#4a86ff", Success = "#3dcb6c", Warning = "#ffb545", Error = "#ff3f5f", LinesDefault = "#33323e", TableLines = "#33323e", Divider = "#292838", OverlayLight = "#1e1e2d80", }; 问题是,当我刷新任何页面时,颜色会由于某种原因发生变化。模式(深色/浅色)保持不变,但深色模式下颜色更亮一些。就像它们被重置为某些默认值一样。 我想要的颜色: 浏览器刷新后得到的颜色: 如果我现在打开汉堡菜单或将模式切换为浅色,然后再切换回深色,颜色就会得到纠正。 我做错了什么,刷新后颜色不正确? 分析模板中的代码,发现每次刷新页面时,_isDarkMode始终是true。这就是根本原因。 我们可以将_isDarkMode的值存储在localStorage或者其他地方,并在刷新页面加载所选主题时加载。 测试中发现的问题是StateHasChanged();会导致页面加载并且主题会在一段时间后发生变化,因为预加载的主题仍然是 DarkMode。 这是给您的样本。 @inherits LayoutComponentBase @inject IJSRuntime JS <MudThemeProvider Theme="@_theme" IsDarkMode="_isDarkMode" /> <MudPopoverProvider /> <MudDialogProvider /> <MudSnackbarProvider /> <MudLayout> <MudAppBar Elevation="1"> <MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@((e) => DrawerToggle())" /> <MudText Typo="Typo.h5" Class="ml-3">Application</MudText> <MudSpacer /> <MudIconButton Icon="@(DarkLightModeButtonIcon)" Color="Color.Inherit" OnClick="@DarkModeToggle" /> <MudIconButton Icon="@Icons.Material.Filled.MoreVert" Color="Color.Inherit" Edge="Edge.End" /> </MudAppBar> <MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2"> <NavMenu /> </MudDrawer> <MudMainContent Class="mt-16 pa-4"> @Body </MudMainContent> </MudLayout> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss">🗙</a> </div> @code { private bool _drawerOpen = true; private bool _isDarkMode = true; private MudTheme? _theme = null; private bool _initialized = false; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { var savedDarkMode = await JS.InvokeAsync<string>("localStorage.getItem", "isDarkMode"); if (!string.IsNullOrEmpty(savedDarkMode)) { _isDarkMode = bool.Parse(savedDarkMode); StateHasChanged(); } _theme = new MudTheme { PaletteLight = _lightPalette, PaletteDark = _darkPalette, LayoutProperties = new LayoutProperties() }; _initialized = true; StateHasChanged(); } } private void DrawerToggle() { _drawerOpen = !_drawerOpen; } private async Task DarkModeToggle() { _isDarkMode = !_isDarkMode; await JS.InvokeVoidAsync("localStorage.setItem", "isDarkMode", _isDarkMode.ToString().ToLower()); } private readonly PaletteLight _lightPalette = new() { Black = "#110e2d", AppbarText = "#424242", AppbarBackground = "rgba(255,255,255,0.8)", DrawerBackground = "#ffffff", GrayLight = "#e8e8e8", GrayLighter = "#f9f9f9", }; private readonly PaletteDark _darkPalette = new() { Primary = "#7e6fff", Surface = "#1e1e2d", Background = "#1a1a27", BackgroundGray = "#151521", AppbarText = "#92929f", AppbarBackground = "rgba(26,26,39,0.8)", DrawerBackground = "#1a1a27", ActionDefault = "#74718e", ActionDisabled = "#9999994d", ActionDisabledBackground = "#605f6d4d", TextPrimary = "#b2b0bf", TextSecondary = "#92929f", TextDisabled = "#ffffff33", DrawerIcon = "#92929f", DrawerText = "#92929f", GrayLight = "#2a2833", GrayLighter = "#1e1e2d", Info = "#4a86ff", Success = "#3dcb6c", Warning = "#ffb545", Error = "#ff3f5f", LinesDefault = "#33323e", TableLines = "#33323e", Divider = "#292838", OverlayLight = "#1e1e2d80", }; public string DarkLightModeButtonIcon => _isDarkMode switch { true => Icons.Material.Rounded.AutoMode, false => Icons.Material.Outlined.DarkMode, }; }

回答 1 投票 0

如何在iOS中使用wasmer?

Wasmer 是一个跨平台 WebAssembly 运行时。我想在IOS平台上运行wsam。官方文档没有教程,网上也找不到demo

回答 3 投票 0

Rust WASM 代码在等待 web_sys::Window.fetch_with_request 时停止

我正在尝试在 Rust WASM 代码中使用 web_sys 来使用 Fetch API。我定义了一个异步函数: #[wasm_bindgen] pub async fn fetch_as_vec_u8(resource_name: &str) -> 结果 我正在尝试在 Rust WASM 代码中使用 web_sys 来使用 Fetch API。我定义了一个异步函数: #[wasm_bindgen] pub async fn fetch_as_vec_u8(resource_name: &str) -> Result<Vec<u8>, JsValue> { let opts = RequestInit::new(); opts.set_method("GET"); opts.set_mode(RequestMode::Cors); let request = Request::new_with_str_and_init(resource_name, &opts)?; request.headers().set("Accept", "application/octet-stream")?; let window = web_sys::window().unwrap(); let resp_value = JsFuture::from(window.fetch_with_request(&request)).await?; assert!(resp_value.is_instance_of::<Response>()); let resp: Response = resp_value.dyn_into().unwrap(); let array_buf = JsFuture::from(resp.array_buffer()?).await?; assert!(array_buf.is_instance_of::<ArrayBuffer>()); let typebuf: js_sys::Uint8Array = js_sys::Uint8Array::new(&array_buf); let mut body = vec![0; typebuf.length() as usize]; typebuf.copy_to(&mut body[..]); Ok(body) } 从同步代码中调用函数,如下所示: let vert_shader_src_bytes: Vec<u8> = block_on(fetch_as_vec_u8( format!("http://localhost:8080/shaders/{}.vert.glsl", shader_name).as_str(), )) .expect(format!("Failed to fetch {}.vert.glsl", shader_name).as_str()); 这不起作用,并且在浏览器中执行代码只是挂起,没有任何控制台输出。预期的 GET 请求未发送。 调试fetch_as_vec_u8显示是以下行停止了: let resp_value = JsFuture::from(window.fetch_with_request(&request)).await?; 请求的资源存在,可以从本地URL下载。以上fetch实现是基于官方示例。 不幸的是,我被困住了。谁能给我指出挖掘的方向吗? 预先感谢! 您似乎正在使用 block_on 函数来阻止当前线程,直到您的 future 完成。然而,在几乎所有情况下,Rust/WebAssembly 都受到单线程 JavaScript 事件循环的影响。为了将来能够完成,(浏览器/JavaScript 引擎的)事件处理和(Rust 的)async运行时代码必须在其他地方运行,但没有另一个线程同时允许这样做。 我在制作 WebAssembly 游戏时使用的一个解决方案是使用 future_to_promise 在加载完成后调度代码: struct Loaded { glsl: Option<String>, } static LOADED: Mutex<Option<Loaded>> = Mutex::new(None); #[wasm_bindgen] fn load() -> Promise { // If we didn't return the promise, it would still complete, but then // we'd have to tell JavaScript to call `init` some other way. wasm_bindgen_futures::future_to_promise(async move { let vert_shader_src_bytes: Vec<u8> = fetch_as_vec_u8( format!("http://localhost:8080/shaders/{}.vert.glsl", shader_name).as_str(), )).await.expect(format!("Failed to fetch {}.vert.glsl", shader_name).as_str()); // Either the rest of your app goes here or you need to // mutate global (static) state so that subsequent // synchronous JavaScript -> WebAssembly function calls // can access what was loaded. // Here we do the latter: LOADED.lock().unwrap().glsl = Some(Loaded{ glsl: String::from_utf8(glsl) }); Ok(JsValue::undefined()) }) } #[wasm_bindgen] fn init() { let loaded = LOADED.lock().unwrap(); init_rendering(&loaded.glsl); } JavaScript 可能会这样做: wasm.load().await; wasm.init(); // etc. requestAnimationFrame(() => { wasm.frame(); });

回答 1 投票 0

emcc / emscripten 的 Twiggy 命令行选项可获取有意义的数据

我正在使用 Rust Wasm 工具链中的 Twiggy 来分析 WebAssembly 包,以找到代码大小的最大贡献者。 命令行选项 twiggy top -n 20 myWasm.wasm 产生表输出...

回答 1 投票 0

如何在浏览器中将 .wat 文本转换为 .wasm 二进制文件

令人惊讶的是,wabt 在底层依赖于 fs,这显然在浏览器中不可用。 我正在开发一个在线编译器,它将源代码转换为 WAT,因此预编译在

回答 1 投票 0

WebAssembly 导出函数:无法读取未定义的属性

我正在尝试在我的JavaScript应用程序的WebWorker模块上运行lightningcss。 我将其作为模块导入,如下所示: 从'./index.mjs'导入*作为lightningcss; 并尝试使用该函数作为

回答 1 投票 0

DUCKDB - 具有 Utf-8 返回类型的 WASM 标量 UDF 无法按预期工作

在我的项目中,我正在使用duckdb wasm。我遇到了对自定义用户定义函数 (UDF) 的需求,因此我创建了一个返回类型为 UTF-8 的函数。但是,它始终返回 \u0000。 // ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.