我正在尝试使用emscripten从js调用我的c / c ++函数。为此,我指的是本教程:https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html#embind
我正在遵循本文中提到的过程,但是lerp
函数没有导出到Module
,并且我在浏览器控制台中得到了TypeError: Module.lerp is not a function
。
我只是使用本文中提到的文件而没有进行任何修改,但是仍然无法从js调用c函数。
请帮助我我所缺少的内容
// quick_example.cpp
#include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("lerp", &lerp);
}
index.html
<!doctype html>
<html>
<script src="quick_example.js"></script>
<script>
console.log('lerp result: ' + Module.lerp(1, 2, 0.5));
</script>
</html>
构建说明:
emcc --bind -o quick_example.js quick_example.cpp
运行本地服务器
pyhton -m SimpleHTTPServer 9000
在浏览器上,启动此页面时,出现此错误。
TypeError: Module.lerp is not a function
谢谢
答案 0 :(得分:0)
我认为您需要将lerp函数放在EXPORTED_FUNCTIONS命令行选项中
EXPORTED_FUNCTIONS = ['lerp']
此外,您可能希望在代码中使用EMSCRIPTEN_KEEPALIVE批注以防止内联,但是EXPORTED_FUNCTIONS应该足够了。参见:
答案 1 :(得分:0)
初始化尚未完成。
function eachColor(callback) {
for (let i = 0, n = this._dta.length; i < n; i += 4) {
callback(this.getColorAtIndex(i), i)
}
}
function setColorAtIndex(index, color) {
this._dta[index] = color.red
this._dta[index + 1] = color.green
this._dta[index + 2] = color.blue
this._dta[index + 3] = color.alpha
}
function getColorAtIndex(index) {
return color.rgb(this._dta[index], this._dta[index + 1], this._dta[index + 2], this._dta[index + 3])
}
答案 2 :(得分:0)
问题以emscripten打开: https://github.com/kripken/emscripten/issues/6859
到那时我们可以使用@zakki建议的方法来实现