Я пишу Node-приложение (в TS), которое должно быть связано с какой-то нативной библиотекой.
У меня есть библиотека (написанная на C) - пусть это будет черный ящик - и я пишу оболочку, используя NAN. Собственный интерфейс библиотеки можно упростить до следующих функций:
typedef void (*got_message_reply_cb)(context ctx, void * priv, struct X * the_reply);
context lib_connect();
bool lib_send_message(context ctx, message msg, got_message_reply_cb callback, void * priv);
Я считаю, что это довольно просто понять.
Итак, я пытаюсь обернуть ту нативную библиотеку черного ящика во что-то вроде:
class TheLibrary : public Nan::ObjectWrap {
Initialize(v8::Handle<v8::Object> target);
SendMessage(...)
}
А затем в объект JavaScript, например:
class TheLibrary {
SendMessage(message: whatever, callback: (reply) => void); // or return promise, does not matter
}
Как выполнить фактическую обработку обратного вызова в модуле NAN C++? Мне нужно как-то передать обратный вызов (представленный, вероятно, Local<Function>
- который, если я правильно понимаю, ограниченный объем) как указатель на функцию, а затем извлечь его обратно. Как это сделать? Спасибо за ваши ответы.