如何从启动时通过JavaScript检测到的值中初始化C ++变量(编译为WebAssembly)?
此代码需要从WebAssembly模块启动,因此用户不能注入与实际值不同的值。
您可以从C ++函数内部运行JavaScript代码。这样的JS代码可以访问在Web浏览器中运行时通常可以访问的所有对象。为此,我们将使用screen.availWidth
宏,该宏执行返回EM_ASM_INT值的JS代码。
我们将JS代码插入C ++代码int
中。使用example.cpp
功能可确保代码在加载页面时自动执行,而无需手动加载WebAssembly模块。但是,您也可以使用其他功能,将其导出并在您的网页上执行。
int main()
我们用#include <iostream>
#include <emscripten.h>
int main()
{
int screen_width = EM_ASM_INT(
return screen.availWidth;);
std::cout << "Screen width=" << screen_width << std::endl;
}
编译上面的example.cpp
代码,如下:
Emscripten compiler
[输出是一个嵌入了emcc example.cpp -o example.html
函数的网页,其中包含JS代码(确实,开始)。要在允许跨域资源共享(CORS)的同时运行代码,我们将使用int main()
工具(由于无法在Firefox上运行示例,因此我改用了Chrome):
emrun
[此方法适用于标量类型为emrun --browser chrome example.html
(使用int
),EM_ASM_INT
(使用double
)的返回值,但也使用EM_ASM_DOUBLE
的数组(使用char*
的谨慎和手动内存管理,如图EM_ASM_INT
所示。