我们假设我有一个基本的C ++ API,如下所示:
#include <random>
#include <emscripten/bind.h>
int getRandomInt(int low, int high) {
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist (low, high);
return dist(mt);
}
float getRandomFloat(float low, float high) {
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<float> dist (low, high);
return dist(mt);
}
EMSCRIPTEN_BINDINGS(hello_world_module) {
using namespace emscripten;
// function("lerp", &lerp);
function("getRandomInt", &getRandomInt);
function("getRandomFloat", &getRandomFloat);
}
我想为浏览器生成这些功能。现在我知道如何使用这些命令为节点JavaScript模块执行此操作:
em++ -std=c++11 -Wall -fPIC --minify 0 -O2 --bind --memory-init-file 0 \
-s DEMANGLE_SUPPORT=1 \
-s NO_EXIT_RUNTIME=1 \
random_api.cpp -o random_api.js
在内部节点中,我可以运行这些命令(让我们说node run_random_api.js
):
var random_api = require('./random_api.js')
console.log("getRandomInt(0, 100)", random_api.getRandomInt(0, 100));
console.log("getRandomInt(0, 100)", random_api.getRandomInt(0, 100));
console.log("getRandomInt(0, 100)", random_api.getRandomInt(0, 100));
现在我怎样才能让run_random_api.js
在浏览器中工作?
我在browserify
上尝试run_random_api.js
并将其转换为bundle.js
,但说random_api.getRandomInt
不是函数(google-chrome 64.0.3282.167)
答案 0 :(得分:0)
您可以像任何其他JavaScript一样加载脚本。然后,您可以通过Module
访问导出的功能,例如Module.getRandomInt()
。
在html中加载脚本
<script type="text/javascript" src="random_api.js"></script>
然后您可以访问这样的功能
function getRandomInt(low, high) {
console.log(Module.getRandomInt(low,high));
}
您可以详细了解Module
对象here。