Je suis assez nouveau dans AS et WA, et mon doute actuel est de savoir comment obtenir des chaînes et des tableaux à partir de JavaScript.
index.js
const fs = require("fs");
const abort = () => { throw new Error('....') };
const compiled = new WebAssembly.Module(fs.readFileSync("aaa.wasm"));
const instance = new WebAssembly.Instance(compiled, { env: { abort } })
const lib = instance.exports
console.log(' say', ':', lib.say("oi"))
console.log(' say', ':', lib.say("hi"))
console.log(' add', ':', lib.add(100, 100))
console.log('teste', ':', lib.teste())
index.ts
import 'allocator/buddy';
export function say(hello: string): string {
return hello + " world"
}
export function add(a: i32, b: i32): i32 {
return a + b;
}
export function teste(): string {
let x = "ZZZZZZZZZZZZ"
return x;
}
copier et exécuter avec nodejs
$ asc assembly\index.ts -o aaa.wasm
$ node index.js
ce que j'obtiens (je soupçonne que ces entiers sont des pointeurs de mémoire, j'ai raison?)
say : 3136
say : 3168
add : 200
teste : 84
ce que j'attends
say : oi world
say : hi world
add : 200
teste : ZZZZZZZZZZZZ
Désolé pour mon anglais médiocre, je viens du Brésil et le portugais est ma langue principale, et merci pour l'aide.
Le chargeur fournit un utilitaire pour lire une chaîne de la mémoire en utilisant son pointeur (ici: getString
), mais vous pouvez également le faire manuellement en fonction de la disposition de la
J'ai lu la documentation du chargeur et j'essaye de l'utiliser sans succès,
Est-ce que je fais quelque chose de mal?
Ai-je besoin d'installer un chargeur via npm?
index.ts
const loader = require("@assemblyscript/loader");
const file = fs.readFileSync("aaa.wasm")
const fs = require("fs");
const myModule = loader.instatiateBuffer(file, {});
Erreur
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module '@assemblyscript/loader'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (C:\terminal\user\personal\wasmTs\index.js:1:78)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
Le chargeur n'est pas encore sur npm. Pour l'instant, essayez:
const loader = require("assemblyscript/lib/loader");
Wow, cela a fonctionné !!!
J'ai trouvé une erreur dans la documentation du const myModule = loader.instatiateBuffer(fs.readFileSync("myModule.wasm"), myImports);
place insta n tiateBuffer.
Merci beaucoup pour l'aide! ^^
Je publie simplement mes tests comme référence / exemple à d'autres programmeurs aventuriers:
index.ts
import "allocator/tlsf";
export { memory };
export function say(hello: string): string {
return hello + " world"
}
export function add(a: i32, b: i32): i32 {
return a + b;
}
export function teste(): string {
let x = "ZZZZZZZZZZZZ"
return x;
}
export class X {
teste(): String {
return "Aew";
}
}
index.js
const loader = require("./assemblyscript/lib/loader/index");
const fs = require("fs");
const file = fs.readFileSync("index.wasm")
const lib = loader.instantiateBuffer(file, {});
const x = new lib.X()
console.log(' say :' , lib.getString(lib.say(lib.newString("oi"))))
console.log(' say :' , lib.getString(lib.say(lib.newString("hi"))))
console.log(' add :' , lib.add(100, 100))
console.log(' teste :' , lib.getString(lib.teste()))
console.log('method :' , lib.getString(x.teste()))
compiler et exécuter
λ asc index.ts -o index.wasm
λ node index.js
résultats
say : oi world
say : hi world
add : 200
teste : ZZZZZZZZZZZZ
method : Aew
Clôture de ce problème pour l'instant car il n'a reçu aucune réponse récemment. N'hésitez pas à le rouvrir si nécessaire!
Commentaire le plus utile
Je publie simplement mes tests comme référence / exemple à d'autres programmeurs aventuriers:
index.ts
index.js
compiler et exécuter
résultats