Как вызвать JavaScript (в браузере) из Kotlin Native Wasm, передав параметры? - PullRequest
0 голосов
/ 17 июня 2019

Пожалуйста, извините, что я не знаю, должен ли я спрашивать обо всех основных типах в одном посте или отдельно.

Основные вопросы:

  1. Как передать массив с плавающей точкой из Kotlin в JS?
  2. Как насчет других "простых" типов? Как поплавок, строка?
  3. А как насчет других типов, таких как set, map и даже классов данных?

У меня есть это в конце моего основного файла Kotlin

@SymbolName("callback")
external fun cb(<......>)

Если типы в определении cb() соответствуют тому, что я передаю от main(), например Int, Float, тогда cb() из браузера получит правильные значения.

Если я использую Any, то все, что я получу, это целое число (которое, я думаю, должно быть указателем на память).

Я пытался проверить heap, но безрезультатно, как извлечь строки типа int, float,, которые я передал в cb() через Kotlin.

Для массивов я заметил, что в jsinterop есть пакет JsArray, но я не могу найти хорошие ссылки о том, как его использовать.

Одна вещь, которую я заметил, это то, что я могу получить массив целых чисел через Arenas:

    val arena = allocateArena()
    pushIntToArena(arena, 1)
    pushIntToArena(arena, 12)

Тогда я получу массив через konan_dependencies.env.areans.

Но как мне получить массив с плавающей точкой? Пожалуйста, сообщите.

P.S. Я использую плагин konan в моем build.gradle для компиляции в Wasm32. Я передаю callback в Wasm, добавляя функцию к window.konan.libraries в module.wasm.js:

    var konan = {
      libraries: [
        { "callback": function(msg) { console.trace(msg); } }
      ],
    }

...