E4042

E4042#

不合法的桩类型。

在定义 FFI 时,桩类型必须是一个有效的类型,即它们可以在相应的后端原生地表示。

例如,在 WASM 线性后端的 FFI 定义中,不能使用 FixedArray[T]String

错误示例:#

在 WASM 线性后端:

fn ffi(array : FixedArray[Int]) -> Unit = "mod" "ffi"
//             ^~~~~~~~~~~~~~~ Error: Invalid stub type.

建议#

将非原生类型通过 FFI 接口传递的方式取决于 MoonBit 编译器的后端和您使用的运行时。例如,如果你希望在 Wasm 线性内存后端将一个整数数组传递给 JS 宿主,可以将整数一个一个地传递给宿主函数,并在 JS 端存储数组。

type JsArray
fn make_js_array() -> JsArray = "mod" "make_js_array"
fn push_js_array(array : JsArray, value : Int) -> Unit = "mod" "push_js_array"