Javascript 将JS函数传递给C++;函数emscripten
本人具有以下签名的功能:Javascript 将JS函数传递给C++;函数emscripten,javascript,c++,webassembly,emscripten,Javascript,C++,Webassembly,Emscripten,本人具有以下签名的功能: void generate_effect(const std::string& file_name, const std::string& out_dir) { ... ... } 并具有约束力,例如: EMSCRIPTEN_BINDINGS(main) { function("generateEffect", &generate_effect); } 所以在JS中,我这样称呼它: const
void generate_effect(const std::string& file_name, const std::string& out_dir) {
...
...
}
并具有约束力,例如:
EMSCRIPTEN_BINDINGS(main)
{
function("generateEffect", &generate_effect);
}
所以在JS中,我这样称呼它:
const object = await Module()
object.generateEffect("file_name", "out_dir");
这个很好用
但我需要这样做:
object.generateEffect("file_name", "out_dir", function callback(success, msg) {
if(success) ...
else ...
});
function(
"generateEffect",
optional_override(
[](manager& this_, const val& error) {
this_.add_error_listener(
make_error_listener(
[error](const std::string& name, const std::string& message) {
error(name, message);
}));
}))
问题是我尝试过不同的方式回调到C++函数,但是它们对我来说不起作用,我已经尝试过:
void generate_effect(const std::string& file_name, const std::string& out_dir,
emscripten::val callback) // works only when callback has no args
void generate_effect(const std::string& file_name, const std::string& out_dir,
void(*callback)(bool, const char*)) // i must not use raw pointers
我对可选\u覆盖进行了详细说明,我认为我的绑定应该如下所示:
object.generateEffect("file_name", "out_dir", function callback(success, msg) {
if(success) ...
else ...
});
function(
"generateEffect",
optional_override(
[](manager& this_, const val& error) {
this_.add_error_listener(
make_error_listener(
[error](const std::string& name, const std::string& message) {
error(name, message);
}));
}))
我不知道如何在Eclipse中通过两个参数来调用C++函数,我会很高兴得到任何帮助。p> 如果你没有得到答案。尝试reddit cpp_Questions我认为Embind目前不支持绑定类型的闭包。但是,您可以做的是创建一个类,将lambda存储为其属性,并在该类上公开一个
invoke()
方法,该方法可以与Embind绑定并公开给JS。这并不理想,但可能会给你一个暂时的解决办法。不过,请确实在Emscripten repo上提出功能请求,以获得适当的解决方案!