Можно ли передать функцию js в код C ++ и сделать из нее указатель на функцию? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть вопрос, касающийся использования n-api с использованием функции js в коде c ++. Допустим, у меня есть функции, экспортированные из c ++

Napi::Object init(Napi::Env env, Napi::Object exports) {
    exports.Set("testJs", Napi::Function::New(env, TestCpp));
    exports.Set("oneMoreCppFunction", Napi::Function::New(env, CppFunctionWithNativeCode));
    return exports;
};

TestCpp выглядит:

void TestCpp (const Napi::CallbackInfo& info)
{
    Napi::Env env = info.Env();
    Napi::Function callback = info[0].As<Napi::Function>();
    InternalCppFunction(how to pass callback here?)
}

Шаблон InternalCppFunction:

void InternalCppFunction (void (* callback)( void ))
{
 ... Some internal behavior
}

И для использования полной информации из файла js:

const someB = require('bindings')('someB')
const callback = () => {
   someB.oneMoreCppFunction()
}
someB.testJs(callback)

Таким образом, идея заключается в передаче «callback», который написан на js и использует экспортированную функцию «oneMoreCppFunction» из c ++. И как-то передать этот «обратный вызов» внутри «InternalCppFunction» в качестве указателя на функцию. Возможно ли это, и если это так, как я могу преобразовать / адаптировать / обмануть этот персонал? Большое спасибо заранее.

...