Загрузите модуль WASM в Cloudflare WorkerC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Загрузите модуль WASM в Cloudflare Worker

Сообщение Anonymous »

У меня возникли проблемы с загрузкой модуля WASM, созданного Emscripten, с интерфейсом Lib для Cloudflare Worker (с использованием Hono и Wrangler). Определение экспорта находится внутри, sparks.d.ts, и оно автоматически создается цепочкой инструментов Emscripten с помощью этой команды CMake: target_link_options(sparks PRIVATE --emit-tsd "$/sparks .d.ts")
Вот полное определение TypeScript в проекте Worker в разделе src/sparks.d.ts:

Код: Выделить всё

// TypeScript bindings for emscripten-generated code.  Automatically generated at compile time.
declare namespace RuntimeExports {
let HEAPF32: any;
let HEAPF64: any;
let HEAP_DATA_VIEW: any;
let HEAP8: any;
let HEAPU8: any;
let HEAP16: any;
let HEAPU16: any;
let HEAP32: any;
let HEAPU32: any;
let HEAP64: any;
let HEAPU64: any;
}
interface WasmModule {
_main(_0: number, _1: number): number;
___set_stack_limits(_0: number, _1: number): void;
}

type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string;
export interface Lib {
get description(): string;
set description(value: EmbindString);
version: number;
to_str(): string;
delete(): void;
}

interface EmbindModule {
Lib: {
new(_0: EmbindString, _1: number): Lib;
get_instance(_0: EmbindString, _1: number): Lib | null;
};
}

export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule;
export default function MainModuleFactory (options?: unknown): Promise;
У меня есть настройка src/index.ts в Worker, и она компилируется, и я могу получить доступ к localhost:8787/api/lib, но я всегда получайте return c.text("No libptr");

Код: Выделить всё

import { Hono } from 'hono';
import { cors } from 'hono/cors';

import Module from './sparks';
import Lib from './sparks';

type Bindings ={
cors: typeof cors;
}

let libptr: Lib = null;

const loadModule = async (): Promise => {
const activeModule = await Module({
preRun: [
libptr = Lib.get_instance("Calling from JS", 1.2)
],
});
if (activeModule) {
if (libptr) {
console.log(`libptr: ${libptr}`);
console.log(`libptr.to_str(): ${libptr.to_str()}`);
libptr.description = "Updated from JS";
libptr.version = 2.2;
console.log(`libptr.description: ${libptr.description}\nlibptr.version: ${libptr.version}`);
libptr.delete();
} else {

console.error("No lib ptr");
}
} else {
console.error("Failed to create Lib instance");
}
}

loadModule();

const app = new Hono();

app.use('/api/*', cors());

app.use('/api/lib', async c => {
if (libptr) {
return c.text(`libptr:\n\t${libptr.to_str()}`);
} else {
return c.text("No libptr");
}

});

export default app;

Сначала я попытался загрузить модуль в функции запроса /api/lib, используя await loadModule(). Затем я попытался добавить preRun в описание модуля, как показано в примере кода выше.
Я также попробовал добавить в конец файла определения TypeScript следующее: интерфейс по умолчанию Lib;. Я также пробовал импортировать модуль {Lib} из './sparks'

Подробнее здесь: https://stackoverflow.com/questions/790 ... are-worker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»