Я пишу 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, doesn't matter
}
Как выполнить фактическую обработку обратного вызова в модуле NAN C ++? Мне нужно каким-то образом передать обратный вызов (представленный, вероятно, Local<Function>
- который, если я правильно понимаю, с ограниченной областью действия) как указатель на функцию, а затем получить его обратно. Как это сделать? Спасибо за ваши ответы.