[英]How to pass strings between C++ and javascript via emscripten
[英]How to pass array of strings between javascript and C/C++ code with webassembly/emscripten?
我正在嘗試編寫一個 web 應用程序,它將使用后端 C/C++ 代碼進行某種文字處理(比如拼寫檢查、語法檢查、單詞分析)。 (我有 c/C++ 代碼在另一個桌面應用程序中工作......我想把它帶到網絡上)。 我想要一個執行此操作的示例最小代碼(將字符串數組從 JavaScript 傳遞到 c/c++ 代碼......c/c++ 代碼將執行單詞操作......我有這個代碼......以及結果數組字符串將被發送回 JavaScript 在那里它們將被進一步處理。(傳遞arrays很重要)請指出我可以從那里開始的任何此類代碼/教程。
我搜索了 GitHub。 我發現了幾個使用 emscripten 的項目,但在任何地方都找不到。 (我能得到一些線索的唯一地方是用 emscripten 構建的 Hunspell ......但是我無法成功構建它)
請告訴我。 提前致謝。
static char *string_buffer = NULL;
static size_t string_length = 0;
char * EMSCRIPTEN_KEEPALIVE string_start(size_t length)
{
// allocate one extra character for the terminator
char *array = new char[length + 1];
// friendly replace the current, if any
if (string_buffer != NULL) delete[] string_buffer;
// remember
string_buffer = array;
string_length = length;
// done
return string_buffer;
}
void EMSCRIPTEN_KEEPALIVE string_handle(size_t length)
{
// sanity
if (string_buffer == NULL || length > string_length) halt;
// terminate
string_buffer[length] = 0;
// work with the string characters, store/process it
}
void EMSCRIPTEN_KEEPALIVE string_final(void)
{
// friendly
if (string_buffer == NULL) return;
// free
delete[] string_buffer;
// remember
string_buffer = NULL;
}
max_string_length
。let string_pointer_offset = exports.string_allocate(max_string_length);
let view = new Uint8Array(memory.buffer, string_pointer_offset, max_string_length);
view
字節數組,假設 ASCII 字符的逐字節副本,長度為current_string_length
exports.string_handle(current_string_length);
exports.string_final();
釋放字符串“傳輸緩沖區”的 memory 並處理您迄今為止傳輸的所有字符串(如果有)。 從 C++ 到 WASM 的方式是一樣的。 您可以使用 function 通過創建字符數組來開始“發送”並將指針(作為數字)返回到 JavaScript。 然后另一個 function 從 C++ 端和 JavaScript 端填充字節,它們是用view
讀取的。 最后,再次釋放transfer buffer
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.