我正在关注这个“hello world”教程: https://steemit.com/eos/@skenan/eos-development-for-beginners-web assembly
我收到此错误:
类型错误:WebAssembly 实例化:导入参数必须存在并且必须是一个对象
知道可能是什么原因造成的吗?
我正在尝试在WebAssembly中提交一个简单的HTTP GET请求.为此,我编写了这个程序(从Emscripten网站复制,稍作修改):
#include <stdio.h>
#include <string.h>
#ifdef __EMSCRIPTEN__
#include <emscripten/fetch.h>
#include <emscripten.h>
#endif
void downloadSucceeded(emscripten_fetch_t *fetch) {
printf("Finished downloading %llu bytes from URL %s.\n", fetch->numBytes, fetch->url);
// The data is now available at fetch->data[0] through fetch->data[fetch->numBytes-1];
emscripten_fetch_close(fetch); // Free data associated with the fetch.
}
void downloadFailed(emscripten_fetch_t *fetch) {
printf("Downloading %s failed, HTTP failure status code: %d.\n", fetch->url, fetch->status);
emscripten_fetch_close(fetch); // Also free data on failure.
}
unsigned int EMSCRIPTEN_KEEPALIVE GetRequest() {
emscripten_fetch_attr_t attr;
emscripten_fetch_attr_init(&attr);
strcpy(attr.requestMethod, "GET");
attr.attributes …Run Code Online (Sandbox Code Playgroud) 我希望有一个SPA,它可以完成客户端的所有工作,甚至可以生成一些图形/视觉效果.
我希望能够让用户单击按钮并保存页面中的视觉效果,表格和其他内容(既可以看到也可以看不到,因此右键单击保存或复制/粘贴并不总是一个选项).
如何从webassembly/blazor库调用函数,获取结果并将其保存为客户端文件?
这个想法是这样的......?
CSHTML
<input type="file" onchange="@ReadFile">
<input type="file" onchange="@SaveFile">
@functions{
object blazorObject = new blazorLibrary.SomeObject();
void ReadFile(){
blazorObject.someFunction(...selectedFile?...);
}
void SaveFile(){
saveFile(...selectedFile..?)
}
}
Run Code Online (Sandbox Code Playgroud) 可以像这样传递一个整数数组:
const js = import("./webassembly_rust");
let array_nums = [1,2,3,4,5,6,7,8,9];
js.then(js => {
js.test( array_nums );
});
Run Code Online (Sandbox Code Playgroud)
到WebAssembly并将其保存在这样的向量中:
extern crate serde_json;
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
#[macro_use]
extern crate serde_derive;
#[wasm_bindgen]
pub fn test(array: JsValue) {
let elements: Vec<u32> = array.into_serde().unwrap();
}
Run Code Online (Sandbox Code Playgroud)
也可以像这样传递一个对象:
const js = import("./webassembly_rust");
let jsObject = {name: "hello world", id: "99", parent_id: "11"};
js.then(js => {
js.test( jsObject );
});
Run Code Online (Sandbox Code Playgroud)
到WebAssembly并将其保存为这样的Element结构:
extern crate serde_json;
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
#[macro_use]
extern crate serde_derive;
#[derive(Serialize, Deserialize)] …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个 Rust WebAssembly 项目并修改了rust-webpack-template作为我的起点。该模板是一个带有 JavaScript 文件的 webpack 项目,该文件调用单个 Wasm 函数,Rust Wasm 从那里接管。
我修改了模板,因为我想在 JavaScript 中使用我的主要逻辑并通过 API 调用 Rust Wasm。
我已将 webpack 条目更改为bootstrap.js如下所示。
// bootstrap.js
import("./index.js").catch(e =>
console.error("Error importing 'index.js':", e)
);
Run Code Online (Sandbox Code Playgroud)
我添加了文件index.js,它调用了 Rust Wasm 函数
// index.js
import * as wasm from "../crate/pkg/rust_webpack";
const title = document.getElementById("msg");
title.innerText = wasm.get_msg();
Run Code Online (Sandbox Code Playgroud)
get_msgRust的函数如下所示:
#[wasm_bindgen]
pub fn get_msg() -> String {
"Hello from Rust WebAssembly!".to_owned()
}
Run Code Online (Sandbox Code Playgroud)
当我使用 运行项目时webpack-dev-server -d,一切正常。
但是,当我使用构建项目webpack并尝试直接托管生成的文件时,没有显示任何内容并且浏览器控制台显示错误:
导入“index.js”时出错:TypeError:“响应具有不受支持的 MIME …
我有存储在客户端浏览器内存中的数据。例如,假设数据集如下:
"name" (string), "age" (int32), "isAdult" (bool)
"Tom" , 29 1
"Tom" , 14 0
"Dina" , 20 1
Run Code Online (Sandbox Code Playgroud)
我想在javascript中对此数据运行非平凡的SQL语句,例如:
SELECT name, GROUP_CONCAT(age ORDER BY age) ages
FROM arrowData a1 JOIN arrowData a2 USING (name)
WHERE a1.isAdult != a2.isAdult
Run Code Online (Sandbox Code Playgroud)
我会得到:
"name" (string), "ages" (string)
"Tom" "14,29"
Run Code Online (Sandbox Code Playgroud)
我在javascript中拥有的数据存储为apache Arrow(也与Perspective结合使用),并且我也想对该apache Arrow数据执行SQL。作为最后的选择,我认为可以在wasm中使用sqllite,但是我希望可以有一种更简单的方法来直接查询Arrow数据,而不必将所有数据移到sqllite存储中来对它执行查询。
有什么方法可以做到这一点?
我有以下下拉菜单:
public class object {
public other_object apple {get; set;}
...
public string stuff {get; set;}
...
}
public class other_object {
public string id {get; set;}
public string name {get; set;}
}
<select class="custom-select" @bind="@object.apple">
<option value="@object.apple">@object.apple.name</option>
...
</select>
Run Code Online (Sandbox Code Playgroud)
我想将选择绑定到一个对象,但只想显示该对象的某些属性。这会给我错误:
System.InvalidOperationException: 类型“other_object”没有支持从字符串转换的关联 TypeConverter。将“TypeConverterAttribute”应用于类型以注册转换器。
这是可能的吗?我不太确定类型转换器是如何工作的。
如何将本地闭包转换为js_sys::Function?
我想做这样的事情:
let canvas = document.get_element_by_id("canvas").unwrap();
let e: web_sys::HtmlElement = canvas.dyn_into().unwrap();
let f = || {};
e.set_onresize(Some(&f.into()));
Run Code Online (Sandbox Code Playgroud) 我正在摆弄默认的 VS2019 (16.6.5) Blazor WebAssembly 项目。但是,当我查看Chrome(或 Firefox 或 Edge)> Developer Tools [F12] > network并启用Disable Cache 时,我没有看到加载太多内容?
在Dev Tool > Sources 中,我可以看到dotnet.wasm已以某种方式加载。
通过阅读一些像这样的文章,我看到了显示 DLL 和 wasm 正在加载的屏幕截图。
为什么我看不到?
编辑:好的,只有在从 VS2019 开始调试 Blazor WebAssembly 项目时,我才成功地看到 DLL 像我想要的那样加载。当我在没有调试的情况下启动项目时,我仍然获得与第一个屏幕截图相同的轻量级负载。为什么?
调用文件中最简单的函数之一Universe.render(它用于渲染表示游戏状态的字符串)。当我运行时它会导致错误wasm-pack build:
Fatal: error in validating input
Error: failed to execute `wasm-opt`: exited with exit code: 1
full command: "/home/vaer/.cache/.wasm-pack/wasm-opt-4d7a65327e9363b7/wasm-opt" "/home/vaer/src/learn-rust/wasm-game-of-life/pkg/wasm_game_of_life_bg.wasm" "-o" "/home/vaer/src/learn-rust/wasm-game-of-life/pkg/wasm_game_of_life_bg.wasm-opt.wasm" "-O"
To disable `wasm-opt`, add `wasm-opt = false` to your package metadata in your `Cargo.toml`.
Run Code Online (Sandbox Code Playgroud)
如果我删除该函数,则代码构建时不会出错。如果我用以下函数替换它,构建将失败并出现相同的错误:
pub fn wtf() -> String {
String::from("wtf")
}
Run Code Online (Sandbox Code Playgroud)
似乎任何返回 a 的函数都会String导致此错误。为什么?
以下是我的全部代码:
mod utils;
use wasm_bindgen::prelude::*;
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
// …Run Code Online (Sandbox Code Playgroud) webassembly ×10
rust ×4
blazor ×3
wasm-bindgen ×3
c# ×2
javascript ×2
.net ×1
apache-arrow ×1
c ×1
dremio ×1
emscripten ×1
html ×1
http ×1
rust-wasm ×1
serde ×1
wasm-pack ×1
web ×1
webpack ×1