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上提出功能请求,以获得适当的解决方案!