#javascript #c #emscripten
#javascript #c #эмскриптен
Вопрос:
У меня есть приложение emscripten. У меня есть файл javascript, в котором есть определение функции. Я загружаю этот файл в строку, а затем вызываю emscripten_run_script
его. Затем я пытаюсь вызвать эту функцию позже, используя какой-нибудь встроенный EM_ASM
вызов, но он говорит, что определение функции не может быть найдено.
std::ifstream file("script.js"); // script.js has "someFunc" defined
std::string str((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
emscripten_run_script( str.c_str() );
// the below give error "someFunc not defined"
EM_ASM({
someFunc();
});
Однако, если я загружу этот файл javascript в строку, а затем добавлю строку с вызовом функции
std::ifstream file("script.js"); // script.js has "someFunc" defined
std::string str((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
auto combinedStr = str "someFunc();";
emscripten_run_script( combinedStr.c_str() ); // works fine
Как я могу добавить функцию javascript, определенную в файле, в глобальную область видимости для последующего использования?
Файл javascript выглядит следующим образом:
function someFunc()
{
}
Ответ №1:
В тестах, которые я сделал, это, похоже, работает, что должно быть эквивалентно тому, что вы сделали:
#include <stdio.h>
#include <emscripten.h>
int main()
{
char script[] = "someFunc = function() {"
"console.log("hello");"
"};";
emscripten_run_script(script);
EM_ASM({
someFunc();
});
}
Является ли ваше script.js
объявление функции локальной по области видимости (через var someFunc = function(){...};
или как-то так)? emscripten_run_script
не совсем похоже на JavaScripts eval
, а локальные переменные существуют только в области видимости emscripten_run_script
.
Комментарии:
1. Спасибо, простое переключение с «function someFunc()» на «someFunc = function()» сделало свое дело!