我有一个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()
{
}
答案 0 :(得分: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
的范围内。