I am in the process of porting a crypto implementation to JS using emscripten. The compilation of C++ code to js is pretty smooth. But I have some issues in dealing the interaction of JS and compiled C++ code. I have a few question and hope to get some advice from this list.
1. In recent releases uses fastcomp, and and it seems embind no longer works. If I use 'extern "C"' to disable the c++ mangling, and use cwrap to call c function from Js, it should work, right?
2. I personally prefer to use "embind", that allow me to expose C++ class to JS directly. I will have to use 12.0 or earlier release. Is it a recommended practice? Can I expect embind be supported again?
3. I need to pass ArrayBuffer from JS to compiled C++ code, and get back a new (or modified) ArrayBuffer. It is not clear to me how can I do it. The simplified code will be something like this:
class MyCrypto {
MyCryto();
void Process(const string& input, vector<string>& output);
};
EMSCRIPTEN_BINDINGS(MyCryptoModule) {
class_<MyCrypto>("MyCrypto").constructor()
.function("Process", &MyCrypto::Process);
register_vector<std::string>("VectorString");
}
This code compiled well. But I don't know how JS code can be written to call function.
var crypto = new Module.MyCrypto();
crypto.Process(...);
I would like the input to be ArrayBuffer,
var input = new ArrayBuffer(256);
What will be the output look like? Will this work at all?
If std::vector brings trouble, I can give it up and change "output" to be std::string.
void Process(const string& input, string& output);
Compiler will complain about this form.
error: non-const lvalue reference to type 'basic_string[[3 * ...]>' cannot bind to a temporary of type 'basic_string[[3 * ...]>
Thanks in advance
lucoy